Scala中数组的元素总和

Bob*_*Bob 6 arrays scala

如何计算数组的元素和?

val a = new Array[Int](5)
val b = new Array[Int](5)
// assign values
// desired output: Array -> [a(0)+b(0), a(1)+b(1), a(2)+b(2), a(3)+b(3), a(4)+b(4)]

a.zip(b).flatMap(_._1+_._2)
Run Code Online (Sandbox Code Playgroud)

缺少扩展函数的参数类型

Jea*_*art 13

尝试:

a.zip(b).map { case (x, y) => x + y }
Run Code Online (Sandbox Code Playgroud)


Tra*_*own 12

当您在函数定义中使用下划线作为占位符时,它只能出现一次(对于每个函数参数位置,也就是说,在这种情况下flatMap需要a Function1,因此只有一个).如果需要多次引用参数,则不能使用占位符语法 - 您需要为参数指定名称.

正如其他答案所指出的那样,你可以使用.map { case (x, y) => x + y }或者使用元组访问器版本,但是值得注意的是,如果你想在中间集合中避免一堆元组分配,你可以编写以下代码:

scala> (a, b).zipped.map(_ + _)
res5: Array[Int] = Array(0, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

zipped是一个方法,可以在具有a的特殊集合上map使用Function2,这意味着创建的唯一元组是该(a, b)对.在大多数情况下,额外的效率可能并不重要,但事实上你可以Function2从对中传递而不是函数意味着语法通常也会更好.

  • @KevinMeredith取`(0到1000).zip(0到1000).map(p => p._1 + p._2)`vs.(0到1000,0到1000).zipped.map(_ + _)`.第一个创建一千个元组对象,第二个创建一个. (2认同)