在Scala中使用不可变HashMap

在Scala中使用不可变HashMap,scala,hashmap,Scala,Hashmap,我有一个不可变的HashMap,希望从中添加/删除值。假设我必须使用+=和-=方法,但它们不起作用,我得到以下错误: error: value += is not a member of scala.collection.immutable.HashMap 如何在Scala中添加或删除HashMap中的值?它不起作用,因为不可变映射生成新实例,而不是修改现有实例(因此它是不可变的)。因此,将val与不可变映射一起使用是不合法的: scala> val foo = Map.empty[In

我有一个不可变的HashMap,希望从中添加/删除值。假设我必须使用
+=
-=
方法,但它们不起作用,我得到以下错误:

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

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

它不起作用,因为不可变映射生成新实例,而不是修改现有实例(因此它是不可变的)。因此,将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)
scala>val foo=Map.empty[Int,Int]
foo:scala.collection.immutable.Map[Int,Int]=Map()
scala>foo+=1->2
:9:错误:value+=不是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
斯卡拉>酒吧
res2:scala.collection.immutable.Map[Int,Int]=Map(2->2)

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

您正在观看
mutable
HashMap的api,要将pair添加到不可变HashMap,请使用
+

hashMap + ("key", "value") 
或者,如果要删除,请使用
-

hashMap - "key"
但您应该记住,它将创建一个新的结构


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

在不可变的集合中没有方法
+=
,但如果
a
中没有方法
=
,编译器会将类似
a=b
的构造重写为
a=ab

var myMap = Map[Int, String]()
myMap += (1, "a")
最后一行实际上意味着:

myMap = myMap + (1, "a")

-或+单独放置不会修改hashMap@om-nom nom它将返回一个新的映射我如何一次添加多个键值?像hashMap+(“key”,“value”)+(“key2”,“value2”)顺便说一下,应该有hashMap+(“key”->“value”)@MariusKavansky
hashMap++Seq(“foo”->“bar”,“bar”->“baz”)