有你正在两个错误。
调用get一个Map将返回一个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
你应该注意到获得使用.get
的价值,并直接使用括号之间的差异。这是一个更容易理解的错误,不需要理解下面发生的Scala魔法。
现在,如果您在导入可变映射后重复相同的语句,您将能够获得您想要实现的内容。
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))
您不能更新_immutable_贴图,如消息所示。明确使用可变映射或创建更新副本。 – 9000
你会在这里得到答案,向你展示如何获得可变映射,但我也建议习惯使用不可变数据结构。当与Scala一起工作时,通常首选拥有不可变值的函数,并创建一个接受一个值并返回另一个值的函数,而不是就地修改变量。 – Metropolis