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

时间:2018-08-30 14:52:39

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

假设我想要一个可变的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,我该如何解决?

1 个答案:

答案 0 :(得分:0)

声明

hm(42) += 1234

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


如果您要更新HashMap本身,请从定义中删除withDefault部分,而使用getOrElseUpdate

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

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

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