如何在scala Map中设置值?

时间:2015-03-12 11:18:43

标签: scala dictionary

我是scala的新手。我有一张地图。我想在Map中使用特定键设置一个值。这是我写的代码 -

var mp: Map[Int, ParticipationStateTransition] = Map.empty[Int, ParticipationStateTransition]

val change: ParticipationStateTransition = new ParticipationStateTransition

mp(ri.userID) = change

它在第三行显示的错误是 -

  

应用程序不带参数

我做错了什么?提前谢谢。

1 个答案:

答案 0 :(得分:8)

使用.updated

scala> val m = Map(1 -> 2)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala> val n = m.updated(1, 3)
n: scala.collection.immutable.Map[Int,Int] = Map(1 -> 3)

scala> m
res0: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala> n
res1: scala.collection.immutable.Map[Int,Int] = Map(1 -> 3)

请注意,scala的Map是不可变的,因此您需要指定.updated的返回值,它不会更改原始地图。

如果您想更改地图,可以使用collection.mutable.Map然后

scala> val m = collection.mutable.Map(1 -> 2)
m: scala.collection.mutable.Map[Int,Int] = Map(1 -> 2)

scala> m.update(1, 3)

scala> m
res3: scala.collection.mutable.Map[Int,Int] = Map(1 -> 3)

如果要一次设置多个值,可以执行以下操作:

scala> val m = Map(1 -> 2)
m: scala.collection.immutable.Map[Int,Int] = Map(1 -> 2)

scala> val n = m ++ List((1 -> 3), (2 -> 4)) // also accepts an Array, a Map, …
n: scala.collection.immutable.Map[Int,Int] = Map(1 -> 3, 2 -> 4)