2016-09-25 66 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)