我正在Scala中学习不可变类型,并且正在努力完成此基本任务。我只需要在地图内附加一个双精度数组。我不想使用ArrayBuffer。
我的最终目标是制作一个邻接矩阵。当我在地图上附加一个新项(一个(整数,双精度)元组)时,我想增加地图中每个数组的大小-本质上是增加矩阵的维数。
var map = Map[Int, Array[Double]]()
map += (0 -> new Array[Double](5))
// HOW TO DO THIS
map(0) = map(0) :+ 0.01
for ((i, a) <- map) {
print(i + ": ")
for (d <- a) print(d + ", ")
}
我上面编写的内容无法编译。但是,仅map(0) :+ 0.01
会实现我的目标,即将其附加到映射中的不可变数组上,但是却无法实现我的目标。
答案 0 :(得分:2)
由于它是不可变的Map,因此您无法就地更改值,就像您尝试使用map(0) = map(0) :+ 0.01
所做的那样。
一种可能的解决方案是使用updated
方法,该方法返回更新的地图(所有方法,例如 add , remove , modify 不变的数据结构返回新的数据结构):
map = map.updated(0, map(0) :+ 0.01)
一些例子证明:
var map = Map[Int, Array[Double]]()
map += (0 -> new Array[Double](5))
map = map.updated(0, map(0) :+ 0.01)
map(0) // res1: Array[Double] = Array(0.0, 0.0, 0.0, 0.0, 0.0, 0.01)
map = map.updated(0, map(0) :+ 0.02)
map(0) // res2: Array[Double] = Array(0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.02)