我有一个简单的元组数组
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允许元组的总和,我认为这会起作用。那是我的错误。
答案 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)