scala - Scala:更新地图内的数组
问题描述
我正在创建一个里面有一个数组的地图。我需要继续向该数组添加值。我怎么做?
var values: Map[String, Array[Float]] = Map()
我尝试了几种方法,例如:
myobject.values.getOrElse("key1", Array()).++(Array(float1))
几乎没有其他方法可以更新 Map 中的数组。
解决方案
这段代码有问题:
values.getOrElse("key1", Array()).++(Array(float1))
这不会更新Map
in 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
。
推荐阅读
- javascript - 如何合并任意数量的对象数组而不重复?
- javascript - React i18next 返回一个后备语言
- flutter - 卡片内的左侧形状
- javascript - 当我的数据库太大并且我最初需要前端的所有数据时该怎么办
- python-3.x - 需要在不使用循环的情况下对乘法的总数求和
- r - 来自注释数据库的注释的 select() 函数不起作用
- wordpress - Wordpress 在联系信息部分添加用户编号字段
- java - 在Tomcat上部署Spring Boot项目时出现LifecycleException错误
- python - fbprophet 错误:AttributeError:“StanModel”对象没有属性“fit_class”AttributeError:“StanModel”对象没有属性“fit_class”
- android - Android Studio 在转换为 dex 之前修改字节码