Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Scala基于u._1对样式(字符串,Int)的元组列表的值求和_List_Scala_Sum_Tuples - Fatal编程技术网

List Scala基于u._1对样式(字符串,Int)的元组列表的值求和

List Scala基于u._1对样式(字符串,Int)的元组列表的值求和,list,scala,sum,tuples,List,Scala,Sum,Tuples,我通过获取字符串名并将其与伴随的int值匹配来创建元组列表 我希望能够在有多个同名字符串的情况下对元组中的int值求和。我目前的方法是使用groupby,如果我理解正确的话,它会返回一个带有基于u的键的地图1和值列表: def mostPopular(data: List[List[String]]): (String, Int) = { //take the data and create a list[(String,Int)] val nameSums =

我通过获取字符串名并将其与伴随的int值匹配来创建元组列表

我希望能够在有多个同名字符串的情况下对元组中的int值求和。我目前的方法是使用groupby,如果我理解正确的话,它会返回一个带有基于u的键的地图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)
}   

我见过另一种解决方案,它处理了对不同元组值求平均值的问题,但它们没有解释如何对属于同一名称的值求和。在您的例子中,
value
(参见下面的代码片段)是一个
(String,Int)
do
value.map(u.\u 2).sum
value.foldLeft(0)((r,c)=>r+(c.\u 2))的列表

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)

在您的例子中,
value
(参见下面的代码片段)是
(String,Int)
do
value.map(u._2).sum
value.foldLeft(0)((r,c)=>r+(c._2))

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)

以防万一它可能有用:以防万一它可能有用: