代码之家  ›  专栏  ›  技术社区  ›  ishwar

如何在映射中按键添加值

  •  -2
  • ishwar  · 技术社区  · 5 年前

    假设我有一张这样的地图:

    val testMap =Map("Sita" -> 1,"Sita" -> 2,"Ram" -> 3,"Ram" -> 4,"Shyam" -> 5)
    

    我想输出如下: Map("Sita" -> 3,"Ram" -> 7,"Shyam" -> 5)

    1 回复  |  直到 5 年前
        1
  •  2
  •   Tim    5 年前

    正如@jwvh指出的,第一个问题是 Map 将只有3个值,因为键不能重复。早期的键/值对将被具有相同键的后期键/值对替换。

    要解决这个问题,从 List 而不是 地图 :

    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 }
    

    这会给你 地图 你在找的。

        2
  •  1
  •   MilanRegmi    5 年前

    您的地图包含重复的密钥。

    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)
    

    所以,我认为用一张地图是做不到的。