Scala-基于更改的密钥减少映射
假设有以下地图数据Scala-基于更改的密钥减少映射,scala,dictionary,Scala,Dictionary,假设有以下地图数据 val testMap: Map[String, Int] = Map("AAA_abc" -> 1, "AAA_anghesh" -> 2, "BBB_wfejw" -> 3, "BBB_qgqwe" -> 4,
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中,正确的方法是什么?
我尝试使用groupBy
和reduceLeft
进行构造,但找不到解决方案。以下是一种方法:
testMap.groupBy(_._1.split("_").head).mapValues(_.values.sum)
以下是一种方法:
testMap.groupBy(_._1.split("_").head).mapValues(_.values.sum)
一个过程中的变化:
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) })
一个过程中的变化:
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) })
你能展示你尝试过的代码吗?你能展示你尝试过的代码吗?你可以使用mapValues(uu.values.sum)
instead查看groupBy(…).mapValues(…)
很多。我不知道为什么在标准库中没有一个aggregateBy
或reduceBy
。@Chirlo的anser几乎实现了这一点…你可以使用mapValues(u.values.sum)
instead查看groupBy(…).mapValues(…)
很多。我不知道为什么标准库中没有一个aggregateBy
或reduceBy
。@Chirlo的anser几乎实现了这一点。。。