Scala:如何总结元组列表

j3d*_*j3d 11 scala tuples sum

给出以下元组列表......

val list = List((1, 2), (1, 2), (1, 2))
Run Code Online (Sandbox Code Playgroud)

...如何将所有值相加并获得这样的单个元组?

(3, 6)
Run Code Online (Sandbox Code Playgroud)

Lom*_*ard 20

使用foldLeft方法.请查看scaladoc以获取更多信息.

scala> val list = List((1, 2), (1, 2), (1, 2))
list: List[(Int, Int)] = List((1,2), (1,2), (1,2))

scala> list.foldLeft((0, 0)) { case ((accA, accB), (a, b)) => (accA + a, accB + b) }
res0: (Int, Int) = (3,6)
Run Code Online (Sandbox Code Playgroud)

unzip.不如上述解决方案有效.也许更具可读性.

scala> list.unzip match { case (l1, l2) => (l1.sum, l2.sum) }
res1: (Int, Int) = (3,6) 
Run Code Online (Sandbox Code Playgroud)


rig*_*old 11

很简单:(list.map(_._1).sum, list.map(_._2).sum).

  • 这不是两次遍历列表吗?那不是那么有效. (10认同)