如何在scala中获得元组数组的总和

时间:2014-07-11 17:22:22

标签: scala

我有一个简单的元组数组

val arr = Array((1,2), (3,4),(5,6),(7,8),(9,10))

我希望得到(1+3+5+7+9, 2+4+6+8+10)元组作为答案

将总和作为元组的最佳方法是什么,类似于常规数组。我试过了

val res = arr.foldLeft(0,0)(_ + _)

这不起作用。

很抱歉没有写上下文。我在用algebird烫伤时使用它。 Algebird允许元组的总和,我认为这会起作用。那是我的错误。

4 个答案:

答案 0 :(得分:5)

没有添加Tuple之类的内容,因此无法正常工作。您必须对Tuple的每个纵坐标进行操作:

val res = arr.foldLeft(0,0){ case (sum, next) => (sum._1 + next._1, sum._2 + next._2) }

res: (Int, Int) = (25,30)

答案 1 :(得分:2)

这应该很好用:

arr.foldLeft((0,0)){ case ((a0,b0),(a1,b1)) => (a0+a1,b0+b1) }

没有为元组定义添加。

答案 2 :(得分:1)

使用scalaz,它将元组定义为半群,允许您使用追加运算符|+|

import scalaz._
import Scalaz._

arr.fold((0,0))(_ |+| _)

答案 3 :(得分:0)

另一种选择

val (a, b) =  arr.unzip
                       //> a  : Array[Int] = Array(1, 3, 5, 7, 9)
                       //| b  : Array[Int] = Array(2, 4, 6, 8, 10)
(a.sum, b.sum)        
                      //> res0: (Int, Int) = (25,30)