假设我想要一个可变的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
不保存默认的可变HashSet
,我该如何解决?
答案 0 :(得分:0)
声明
hm(42) += 1234
将创建默认值(空HashSet
),然后通过添加1234对其进行更新,然后将其丢弃。
如果您要更新HashMap
本身,请从定义中删除withDefault
部分,而使用getOrElseUpdate
:
hm.getOrElseUpdate(42, HashSet.empty[Int]) += 1234
或者,您可以按原样保留withDefault
,但按以下方式更新哈希映射:
hm(42) = (hm(42) += 1234)