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

Tom*_*aad 8 arrays scala deep-copy

如何在Scala中执行2D数组的深层复制?

例如

val a = Array[Array[Int]](2,3)
a(1,0) = 12
Run Code Online (Sandbox Code Playgroud)

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

Leo*_*Leo 8

您可以使用该类的clone方法Array.对于多维Array,请使用map额外的尺寸.对于你的例子,你得到

val b = a.map(_.clone)
Run Code Online (Sandbox Code Playgroud)


Kev*_*ght 0

鉴于:

val a = Array[Array[Int]]
Run Code Online (Sandbox Code Playgroud)

你可以尝试:

for(inner <- a) yield {
  for (elem <- inner) yield {
    elem
  }
}
Run Code Online (Sandbox Code Playgroud)

一个更深层次的问题是为什么你想用整数来这样做?使用不可变类型的全部目的就是避免这种构造。

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

  • Scala 中的数组是 Java 数组,因此是可变的。 (3认同)