有你正在兩個錯誤。
調用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