Scala地图更新

Scala地图更新,scala,Scala,我想更新另一个映射中存在的映射值。当我尝试更新时,会说“值更新不是选项[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 mem

我想更新另一个映射中存在的映射值。当我尝试更新时,会说“值更新不是选项[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]]

当您创建第一个映射时,它已经是不可变的,无法更改

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 value = map.get("one")
value: Option[scala.collection.immutable.Map[Int,Int]] = Some(Map(1 -> 11))
正如chunjef所建议的,您应该使用可变映射


当您创建第一个映射时,它已经是不可变的,无法更改

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 value = map.get("one")
value: Option[scala.collection.immutable.Map[Int,Int]] = Some(Map(1 -> 11))
正如chunjef所建议的,您应该使用可变映射


你犯了两个错误

在映射上调用get将返回一个选项,因此无法设置该值

当您的操作/目的是更新某个键的值时,您使用的是不可变映射,对此,您需要使用可变映射

让我们尝试编写一些代码片段来解决这两个问题

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> 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

正如消息所说,您不能更新不可变映射。显式地使用可变映射,或者创建更新的副本。您将在这里得到响应,说明如何获取可变映射,但我也建议您习惯使用不可变的数据结构。在使用Scala时,通常建议使用不可变值,并创建接受一个值并返回另一个值的函数,而不是就地修改变量。正如消息所述,您不能更新不可变映射。显式地使用可变映射,或者创建更新的副本。您将在这里得到响应,说明如何获取可变映射,但我也建议您习惯使用不可变的数据结构。在使用Scala时,通常倾向于使用不可变值,并创建接受一个值并返回另一个值的函数,而不是就地修改变量。谢谢。我是斯卡拉的新手。我以前尝试过使用immutable map,但在使用map.get时,它不允许我更新值。谢谢。我是斯卡拉的新手。我以前尝试过使用immutable map,但在使用map.get时,它不允许我更新值。