我想更新另一个地图中存在的地图值。当我尝试更新时说“值更新不是Option [scala.collection.immutable.Map [Int,Int]]的成员”。
我尝试将值转换为Map,但仍然对我不起作用。
val map = Map("one" -> Map(1 -> 11), "two" -> Map(2 -> 22))
val value = map1.get("one")
value(1) = 100 //value update is not a member of Option[scala.collection.Map[Int,Int]]
Run Code Online (Sandbox Code Playgroud)
您正在犯两个错误。
在地图上调用get将返回一个Option,因此您无法设置该值。
当您的操作/目的是更新某些键的值时,您正在使用不可变映射,为此您需要使用可变映射。
让我们尝试编写一些代码片段来解决这两个问题。
scala> val map = Map("one" -> Map(1 -> 11), "two" -> Map(2 -> 22))
map: scala.collection.immutable.Map[String,scala.collection.immutable.Map[Int,Int]] = Map(one -> Map(1 -> 11), two -> Map(2 -> 22))
scala> val valueOption = map.get("one")
valueOption: Option[scala.collection.immutable.Map[Int,Int]] = Some(Map(1 -> 11))
scala> val value = map("one")
value: scala.collection.immutable.Map[Int,Int] = Map(1 -> 11)
scala> value(1) = 100
<console>:13: error: value update is not a member of scala.collection.immutable.Map[Int,Int]
value(1) = 100
Run Code Online (Sandbox Code Playgroud)
您应该注意到.get使用括号和直接使用括号获取值之间的区别。这是一个更容易理解的错误,无需了解下面发生的Scala魔术。
现在,如果在导入可变Map之后重复相同的语句,您将能够获得想要实现的目标。
scala> import scala.collection.mutable.Map
import scala.collection.mutable.Map
scala> val map = Map("one" -> Map(1 -> 11), "two" -> Map(2 -> 22))
map: scala.collection.mutable.Map[String,scala.collection.mutable.Map[Int,Int]] = Map(one -> Map(1 -> 11), two -> Map(2 -> 22))
scala> val value = map("one")
value: scala.collection.mutable.Map[Int,Int] = Map(1 -> 11)
scala> value(1) = 100
scala> map
res2: scala.collection.mutable.Map[String,scala.collection.mutable.Map[Int,Int]] = Map(one -> Map(1 -> 100), two -> Map(2 -> 22))
Run Code Online (Sandbox Code Playgroud)