2014-09-26 41 views
4

非常新手Scala程序员,所以希望这很简单。Scala:基于键的数组之间的总和值

我有元组的阵列看起来像这样:

Array((1,Array(1.0,0.0,5.2,0.0), 
     (1,Array(1.0,0.0,6.3,0.0), 
     (2,Array(0.0,1.0,0.0,1.2), 
     (2,Array(0.0,1.0,0.0,2.5)) 

我想在基于在所述第一密钥的元组的第二部分来概括的相应值。所以,结果是这样的:

Array((1,(2.0,0.0,11.5,0.0), 
     (2,(0.0,2.0,0.0,3.7)) 

我想出的功能是:

def sumByKeys[A](tuples: Array[(String, Array[Double])]) = { 
    tuples.groupBy(_._1).mapValues(_.map(_._2).sum) 
} 

有错误我得到的是

error: could not find implicit value for parameter num: Numeric[Array[Double]] 
     tuples.groupBy(_._1).mapValues(_.map(_._2).sum) 
               ^

我希望这是一件简单的我只是搞乱了数据类型。

谢谢。

+1

为什么你不使用'Map'来代替? – 2014-09-26 15:56:38

回答

4
scala> a.groupBy(_._1).mapValues(_.map(_._2).transpose.map(_.sum)).toArray 
res2: Array[(Int, Array[Double])] = Array((2,Array(0.0, 2.0, 0.0, 3.7)), 
              (1,Array(2.0, 0.0, 11.5, 0.0))) 
+1

这个确实。谢谢! – 2014-09-26 15:54:49

+1

'.transpose'很酷! – tuxdna 2014-09-27 19:46:19