我有对的列表:
List(('a',3),('b',3),('a',1))
我希望通过_1分组和求和_2进行转换。结果应该像
Map('a'->4, 'b' -> 3)
我对Scala很新,所以请善待:)
答案 0 :(得分:2)
更直接的版本。我们使用Map作为累加器折叠列表。 withDefaultValue
表示我们不必测试我们是否已在地图中输入该条目。
val xs = List(('a',3),('b',3),('a',1))
xs.foldLeft(Map[Char, Int]() withDefaultValue 0)
{case (m, (c, i)) => m updated (c,m(c)+i)}
//> res0: scala.collection.immutable.Map[Char,Int] = Map(a -> 4, b -> 3)
答案 1 :(得分:1)
list.groupBy(_._1).mapValues(_.map(_._2).sum)
可以写成
list.groupBy(_._1).mapValues { tuples =>
val ints = tuples.map { case (c, i) => i }
ints.sum
}