我通过获取String名称并将其与附带的int值匹配来创建元组列表。
我希望能够在有多个同名字符串的情况下对元组中的那些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 :(得分:4)
在您的情况下value
(请参阅下面的代码段)是(String, Int)
做value.map(_._2).sum
或value.foldLeft(0)((r, c) => r + (c._2))
nameSums.groupBy(_._1).map { case (key, value) => key -> (value.map(_._2)).sum}
Scala 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)