Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala-基于更改的密钥减少映射_Scala_Dictionary - Fatal编程技术网

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几乎实现了这一点。。。