【问题标题】:Mutable HashMap with a mutable default value doesn't keep the changes [duplicate]具有可变默认值的可变 HashMap 不会保留更改 [重复]
【发布时间】:2019-02-05 13:45:52
【问题描述】:

假设我想要一个可变的HashMap[Int, HashSet[Int]],它具有

  • 整数作为键
  • 可变散列值的整数集

我希望在访问或更新新键的值时默认创建一个空的可变 HashSet

这是我尝试过的:

import collection.mutable.{HashMap, HashSet}

val hm = HashMap
  .empty[Int, HashSet[Int]]
  .withDefault(_ => HashSet.empty[Int])

hm(42) += 1234

println(hm)

意外结果是空的HashMap。我期望一个带有(42 -> HashSet(1234)) 键值对的哈希映射。

为什么HashMap 不保存默认的可变HashSets,我该如何解决这个问题?

【问题讨论】:

    标签: scala hashmap default-value scala-collections mutable


    【解决方案1】:

    声明

    hm(42) += 1234
    

    将创建默认值(一个空的HashSet),然后通过添加 1234 对其进行更新,然后将其丢弃。


    如果您想更新HashMap 本身,请从定义中删除withDefault 部分,并改用getOrElseUpdate

    hm.getOrElseUpdate(42, HashSet.empty[Int]) += 1234
    

    或者,您可以保留 withDefault 原样,但更新您的哈希映射如下:

    hm(42) = (hm(42) += 1234)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2012-01-28
      • 2019-09-12
      • 2019-04-24
      相关资源
      最近更新 更多