在Scala中使用不可变HashMap
我有一个不可变的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
+=
和-=
方法,但它们不起作用,我得到以下错误:
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”)