Scala:附加到地图中的数组

时间:2018-07-13 12:49:43

标签: arrays scala dictionary immutability

我正在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会实现我的目标,即将其附加到映射中的不可变数组上,但是却无法实现我的目标。

1 个答案:

答案 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)