在Scala中使用不可变的HashMap

时间:2013-06-23 10:35:59

标签: scala hashmap

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

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

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

3 个答案:

答案 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,请选择可变地图。