如何按列表中的键分组

时间:2018-09-27 18:23:21

标签: scala

我在Scala中有一个列表,想要按一个键分组并汇总每个键的值:

val l = List(("abc",1),("abc",2),("cbe",5),("cab",1))

我尝试了以下代码:

l.groupBy(identity).mapValues(_.sum) 

但是出现以下错误:

error: type mismatch;
 found   : scala.collection.immutable.Map[(String, Int),Int]
 required: Seq[(String, Int)]

2 个答案:

答案 0 :(得分:2)

它可能已经在stackoverflow中得到了回答,但是您将其分组然后求和list的值。

scala> val l = List(("abc",1),("abc",2),("cbe",5),("cab",1))
                  .groupBy(_._1)
                  .map { case (k, v) => k -> v.map { _._2}.sum}
l: scala.collection.immutable.Map[String,Int] = HashMap(cbe -> 5, abc -> 3, cab -> 1)

答案 1 :(得分:1)

提供列表:

val list = List(("abc",1),("abc",2),("cbe",5),("cab",1))

使用

list.groupBy(_._1).mapValues(_.map(_._2).sum)

在Scala REPL中:

scala> list.groupBy(_._1).mapValues(_.map(_._2).sum)
res13: scala.collection.immutable.Map[String,Int] = Map(cab -> 1, abc -> 3, cbe -> 5)