说我有一张这样的地图:
val testMap =Map("Sita" -> 1,"Sita" -> 2,"Ram" -> 3,"Ram" -> 4,"Shyam" -> 5)
我希望输出为:
Map("Sita" -> 3,"Ram" -> 7,"Shyam" -> 5)
答案 0 :(得分:1)
@jwvh指出的第一个问题是此Map
仅具有3个值,因为不能重复使用键。较早的键/值对将替换为具有相同键的较晚的键/值对。
要解决此问题,请以List
而非Map
开头:
val testList = List("Sita" -> 1, "Sita" -> 2, "Ram" -> 3, "Ram" -> 4, "Shyam" -> 5)
然后,您可以使用groupBy
来收集具有相同键的值,然后计算分组值的总和:
testList.groupBy(_._1).map{ case (k, v) => k -> v.map(_._2).sum }
这将为您提供所需的Map
。
答案 1 :(得分:1)
您的地图包含重复的键。
val testMap = Map("Sita" -> 1, "Sita" -> 2, "Ram" -> 3, "Ram" -> 4, "Shyam" -> 5)
地图包含重复密钥时会发生以下情况:
如果映射先前包含键的映射,则旧值将替换为指定值。
所以
"Sita" -> 1 will be replaced by "Sita" -> 2 and
"Ram" -> 3 will be replaced by "Ram" -> 4
只需打印您将获得的testMap
:
Map(Sita -> 2, Ram -> 4, Shyam -> 5)
因此,我认为无法使用单个Map来完成。