我是函数式编程和Scala的初学者。我有一个包含Double
数字的数组。我想减去元素(基本上是两个数组,见例子),我无法在网上找到如何做到这一点。
例如,考虑
val instance = Array(Array(2.1, 3.4, 5.6),
Array(4.4, 7.8, 6.7))
我想减去4.4 from 2.1
,7.8 from 3.4
和6.7 from 5.6
这在Scala中是否可行?
如果这个问题看起来非常基本但是正确方向的任何指导都会受到赞赏,那么道歉。谢谢你的时间。
答案 0 :(得分:5)
您可以使用.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个参数的元组,而不仅仅是两个参数。