Scala - 根据更改的密钥减少地图

时间:2017-11-14 13:22:03

标签: scala dictionary

让我们说有以下地图数据

val testMap: Map[String, Int] = Map("AAA_abc" -> 1,
                                    "AAA_anghesh" -> 2,
                                    "BBB_wfejw" -> 3,
                                    "BBB_qgqwe" -> 4,
                                    "C_fkee" -> 5)

现在我想通过key.split("_").head缩小地图,并添加相等的键的所有值。因此,对于此示例,Map应该导致:

Map(AAA -> 3, BBB -> 7, C -> 5)

在Scala中这样做的正确方法是什么? 我尝试使用groupByreduceLeft构建但无法找到解决方案。

2 个答案:

答案 0 :(得分:1)

这是一种方法:

testMap.groupBy(_._1.split("_").head).mapValues(_.values.sum)

答案 1 :(得分:1)

一遍中的变化:

testMap.foldLeft(Map[String,Int]())( (map, kv) => {
  val key = kv._1.split("_").head
  val previous = map.getOrElse(key,0)
  map.updated(key, previous + kv._2) })