如何在scala Map中设置值?

edd*_*ark 3 dictionary scala

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

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

val change: ParticipationStateTransition = new ParticipationStateTransition

mp(ri.userID) = change
Run Code Online (Sandbox Code Playgroud)

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

应用程序不带参数

我究竟做错了什么?提前致谢.

Mar*_*rth 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)
Run Code Online (Sandbox Code Playgroud)

请注意,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)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)