4

我有一个不可变的 HashMap 并想从中添加/删除值。Scala api 文档说我必须使用和+=方法-=,但它们不起作用,我收到以下错误:

error: value += is not a member of scala.collection.immutable.HashMap

如何在 Scala 中的 HashMap 中添加或删除值?

4

3 回答 3

5

您正在观看mutableHashMap 的 api,以将对添加到不可变的 HashMap 使用+

hashMap + ("key", "value") 

或者如果你想删除使用-

hashMap - "key"

但是你应该记住它会创建一个的结构

至于+=方法,我认为这种设计不好,因为在这种情况下你必须使用var而不是val,这不是一种功能性的方式

于 2013-06-23T10:40:39.317 回答
3

不可变集合中没有方法,但是+=编译器会重写结构,例如.a <opname>= ba = a <opname> b<opname>=a

var myMap = Map[Int, String]()
myMap += (1, "a")

最后一行实际上意味着:

myMap = myMap + (1, "a")
于 2013-06-23T10:41:19.173 回答
1

它不起作用,因为不可变映射会产生新实例而不是修改现有实例(因此它是不可变的)。所以将 val 与不可变映射一起使用是不合法的:

scala> val foo = Map.empty[Int, Int]
foo: scala.collection.immutable.Map[Int,Int] = Map()

scala> foo += 1 -> 2
<console>:9: error: value += is not a member of scala.collection.immutable.Map[Int,Int]
              foo += 1 -> 2
                  ^

scala> var bar = Map.empty[Int, Int]
bar: scala.collection.immutable.Map[Int,Int] = Map()

scala> bar += 2 -> 2

scala> bar
res2: scala.collection.immutable.Map[Int,Int] = Map(2 -> 2)

如果您反对使用 vars,请选择可变映射。

于 2013-06-23T10:40:30.227 回答