如何将List [(Char,Int)]加到Scala中的Map [Char,Int]中?

时间:2016-09-05 16:58:32

标签: scala scala-collections

我有对的列表:

List(('a',3),('b',3),('a',1))

我希望通过_1分组和求和_2进行转换。结果应该像

Map('a'->4, 'b' -> 3)

我对Scala很新,所以请善待:)

2 个答案:

答案 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
}