2014-09-26 52 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