如何在scala中获得元组数组的总和
我有一个简单的元组数组如何在scala中获得元组数组的总和,scala,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允许对元组求和,我认为这是可行的。那是我的错误。没有元组加法这样的东西,所以它不能工作。您必须对元组的每个坐
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允许对元组求和,我认为这是可行的。那是我的错误。没有元组加法这样的东西,所以它不能工作。您必须对
元组的每个坐标进行操作:
val res = arr.foldLeft(0,0){ case (sum, next) => (sum._1 + next._1, sum._2 + next._2) }
res: (Int, Int) = (25,30)
这应该可以很好地工作:
arr.foldLeft((0,0)){ case ((a0,b0),(a1,b1)) => (a0+a1,b0+b1) }
没有为元组定义加法。使用scalaz,它将元组定义为半群,允许您使用追加运算符+
import scalaz._
import Scalaz._
arr.fold((0,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)
这是无效的,它将遍历集合三次(解压,两次求和)。正确。这也很明显,我认为这也很重要。