提问人:Andrey Tyukin 提问时间:8/30/2018 最后编辑:Andrey Tyukin 更新时间:8/30/2018 访问量:355
具有可变默认值的可变 HashMap 不会保留更改 [duplicate]
Mutable HashMap with a mutable default value doesn't keep the changes [duplicate]
问:
假设我想要一个具有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,我该如何解决这个问题?HashMap
HashSet
答:
0赞
Andrey Tyukin
8/30/2018
#1
声明
hm(42) += 1234
将创建默认值(一个空值),然后通过添加 1234 来更新它,然后将其丢弃。HashSet
如果要更新其本身,请从定义中删除该部件,并改用:HashMap
withDefault
getOrElseUpdate
hm.getOrElseUpdate(42, HashSet.empty[Int]) += 1234
或者,您可以保持原样,但按如下方式更新哈希映射:withDefault
hm(42) = (hm(42) += 1234)
评论