具有可变默认值的可变 HashMap 不会保留更改 [duplicate]

Mutable HashMap with a mutable default value doesn't keep the changes [duplicate]

提问人:Andrey Tyukin 提问时间:8/30/2018 最后编辑:Andrey Tyukin 更新时间:8/30/2018 访问量:355

问:

假设我想要一个具有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))

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

斯卡拉 哈希映射 默认值 scala-collections 可变

评论


答:

0赞 Andrey Tyukin 8/30/2018 #1

声明

hm(42) += 1234

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


如果要更新其本身,请从定义中删除该部件,并改用:HashMapwithDefaultgetOrElseUpdate

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

或者,您可以保持原样,但按如下方式更新哈希映射:withDefault

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