gpt4 book ai didi

scala - 修改 Scala 映射值

转载 作者:行者123 更新时间:2023-12-04 19:51:55 25 4
gpt4 key购买 nike

我最近学习了scala,但在修改 map 值时发现了一个问题。

    def exercise1():Map[String, Int]={
val map = createMap()
var newMap = map
for((k,v) <- map){
newMap(k) = 2 * v;
}
newMap
}

函数execution1可以运行。但是当我改变一条线时
newMap(k) = v * 2;

我发现它失败了,为什么?

最佳答案

我不确定是什么 createMap()函数返回,但我的猜测是它返回 Map[String, Int] .

如果这是真的,那么您的代码将失败,因为 Map[String, Int]是不可变的,并且您不能使用此代码将值重新分配给不可变映射 newMap(k) = 2 * v .您必须使用 mutable.Map[String, Int]这里。

示例代码(在 Scala REPL 中):

scala> val x = Map("foo" -> 1, "bar" -> 2)
x: scala.collection.immutable.Map[String,Int] = Map(foo -> 1, bar -> 2)

scala> var y: scala.collection.mutable.Map[String, Int] = scala.collection.mutable.Map(x.toSeq: _*)
y: scala.collection.mutable.Map[String,Int] = Map(foo -> 1, bar -> 2)

scala> y("foo") = 3

scala> y
res2: scala.collection.mutable.Map[String,Int] = Map(foo -> 3, bar -> 2)

但是,您在这里需要的只是一张所有值都翻倍的新 map ,您可以简单地执行以下操作:
x.map { case (k, v) => k -> 2 * v }

关于scala - 修改 Scala 映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44449063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com