我有一个不可变的 HashMap 并想从中添加/删除值。Scala api 文档说我必须使用和+=
方法-=
,但它们不起作用,我收到以下错误:
error: value += is not a member of scala.collection.immutable.HashMap
如何在 Scala 中的 HashMap 中添加或删除值?
我有一个不可变的 HashMap 并想从中添加/删除值。Scala api 文档说我必须使用和+=
方法-=
,但它们不起作用,我收到以下错误:
error: value += is not a member of scala.collection.immutable.HashMap
如何在 Scala 中的 HashMap 中添加或删除值?
您正在观看mutable
HashMap 的 api,以将对添加到不可变的 HashMap 使用+
hashMap + ("key", "value")
或者如果你想删除使用-
hashMap - "key"
但是你应该记住它会创建一个新的结构
至于+=
方法,我认为这种设计不好,因为在这种情况下你必须使用var
而不是val
,这不是一种功能性的方式
不可变集合中没有方法,但是+=
编译器会重写结构,例如.a <opname>= b
a = a <opname> b
<opname>=
a
var myMap = Map[Int, String]()
myMap += (1, "a")
最后一行实际上意味着:
myMap = myMap + (1, "a")
它不起作用,因为不可变映射会产生新实例而不是修改现有实例(因此它是不可变的)。所以将 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,请选择可变映射。