减去数组中指定索引处的元素

Subtracting elements at specified indices in array

我是函数式编程和 Scala 的初学者。我有一个数组数组,其中包含 Double 个数字。我想减去元素(基本上是两个数组,请参见示例),但我无法在网上找到如何执行此操作。

例如,考虑

val instance = Array(Array(2.1, 3.4, 5.6), 
                  Array(4.4, 7.8, 6.7))

我想减去 4.4 from 2.17.8 from 3.46.7 from 5.6

这在 Scala 中可行吗?

如果问题看起来很基础,我们深表歉意,但如能提供正确方向的任何指导,我们将不胜感激。谢谢你的时间。

您可以使用 .zip:

scala> instance(1).zip(instance(0)).map{ case (a,b) => a - b}
res3: Array[Double] = Array(2.3000000000000003, 4.4, 1.1000000000000005)

instance(1).zip(instance(0)) 根据数组中的相应对Array((2.1,4.4), (3.4,7.8), (5.6,6.7))生成一个元组数组

.map{ case (a,b) => a - b}.map(x => x._1 - x._2) 正在为每个元组做减法。

我还建议使用元组而不是顶级数组:

val instance = (Array(2.1, 3.4, 5.6), Array(4.4, 7.8, 6.7))

所以现在,有了额外的定义,它看起来好多了

scala> val (a,b) = instance
a: Array[Double] = Array(2.1, 3.4, 5.6)
b: Array[Double] = Array(4.4, 7.8, 6.7)

scala> val sub = (_: Double) - (_: Double) //defined it as function, not method
sub: (Double, Double) => Double = <function2>

scala> a zip b map sub.tupled
res20: Array[Double] = Array(2.3000000000000003, 4.4, 1.1000000000000005)

*sub.tupled 允许 sub-函数接收 2 个参数的元组,而不是这里只有两个参数。