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