Scala中2D数组的深层副本?

时间:2009-12-08 23:53:37

标签: arrays scala deep-copy

如何在Scala中对2D数组进行深层复制?

例如

val a = Array[Array[Int]](2,3)
a(1,0) = 12

我希望val b复制a的值,但不指向同一个数组。

3 个答案:

答案 0 :(得分:7)

您可以使用clone类的Array方法。对于多维Array,请在额外维度上使用map。对于你的例子,你得到

val b = a.map(_.clone)

答案 1 :(得分:2)

只需转置两次

a.transpose.transpose

答案 2 :(得分:0)

假设:

val a = Array[Array[Int]]
你可以尝试:

for(inner <- a) yield {
  for (elem <- inner) yield {
    elem
  }
}

更深层次的问题是为什么你想用int来做?使用不可变类型的全部意义在于避免使用这种构造。

如果你有更通用的Array[Array[T]],那么你主要关心的是如何克隆T的实例,而不是如何深度克隆数组。