2016-09-25 52 views
1

總結樣式(String,Int)中的元組列表的值我通過獲取一個String名稱並將它匹配到一個伴隨的int值來創建一個元組列表。Scala根據_._ 1

我希望能夠在元組中存在多個相同名稱的字符串時總結這些int值。我目前的做法是遵循groupby的使用方法,如果我理解正確的話,則返回一個基於_的鍵的Map。值_ 1和表:

def mostPopular(data: List[List[String]]): (String, Int) = { 
     //take the data and create a list[(String,Int)] 
     val nameSums = data.map(x => x(1) -> x(2).toInt) 
     //sum the values in _._2 based on same elements in _._1 
     val grouped = nameSums.groupBy(_._1).foldLeft(0)(_+_._2) 
} 

我已經看到了已經處理了平均元組的不同值的其他解決方案,但他們並沒有解釋如何總結,根據同名下降值

+0

以防萬一它有用:https://github.com/reactormonk/scala-counter – Reactormonk

回答

2

在你的情況value(見下面的代碼片段)是(String, Int)列表做value.map(_._2).sumvalue.foldLeft(0)((r, c) => r + (c._2))

nameSums.groupBy(_._1).map { case (key, value) => key -> (value.map(_._2)).sum} 

斯卡拉REPL

scala> val nameSums = List(("apple", 10), ("ball", 20), ("apple", 20), ("cat", 100)) 
nameSums: List[(String, Int)] = List((apple,10), (ball,20), (apple,20), (cat,100)) 

scala> nameSums.groupBy(_._1).map { case (key, value) => key -> (value.map(_._2)).sum} 
res15: scala.collection.immutable.Map[String,Int] = Map(cat -> 100, apple -> 30, ball -> 20) 
相關問題