Scala Summing基于_._ 1的样式(String,Int)中的元组列表的值

时间:2016-09-25 16:43:48

标签: list scala sum tuples

我通过获取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)
}   

我已经看到其他解决方案已经处理了不同的元组值的平均值,但他们还没有解释如何对同名的值进行求和

1 个答案:

答案 0 :(得分:4)

在您的情况下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}

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)
相关问题