首页 > 解决方案 > Scala:更新地图内的数组

问题描述

我正在创建一个里面有一个数组的地图。我需要继续向该数组添加值。我怎么做?

var values: Map[String, Array[Float]] = Map()

我尝试了几种方法,例如:

myobject.values.getOrElse("key1", Array()).++(Array(float1))

几乎没有其他方法可以更新 Map 中的数组。

标签: scala

解决方案


这段代码有问题:

values.getOrElse("key1", Array()).++(Array(float1))

这不会更新Mapin values,它只是创建一个新的Array然后将其丢弃。

您需要Map用新的、更新的替换原来的Map,如下所示:

values = values.updated("key1", values.getOrElse("key1", Array.empty[Float]) :+ float1)

要理解这一点,您需要清楚可变变量和可变数据之间的区别。

var用于创建一个可变变量,这意味着可以为该变量分配一个新值,例如

var name = "John"
name = "Peter" // Would not work if name was a val

相比之下,可变数据保存在可以更改内容的对象中

val a = Array(1,2,3)
a(0) = 12 // Works even though a is a val not a var

在您的示例values中是一个可变变量,但它Map是不可变的,因此无法更改。您必须创建一个新的、不可变的Map并将其分配给 mutable var


推荐阅读