【问题标题】:Deep copy of 2D array in Scala?Scala中二维数组的深拷贝?
【发布时间】:2010-12-24 15:37:14
【问题描述】:

如何在 Scala 中进行二维数组的深拷贝?

例如

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

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

【问题讨论】:

  • 类似话题的讨论可以在:stackoverflow.com/questions/1267436/…>
  • 这不是您的示例中的有效代码。你能重新格式化吗?

标签: arrays scala deep-copy


【解决方案1】:

给定:

val a = Array[Array[Int]]

你可以试试:

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

一个更深层次的问题是你为什么要对整数这样做?使用不可变类型的全部意义在于避免这种构造。

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

【讨论】:

  • Scala 中的数组是 Java 数组,因此是可变的。
【解决方案2】:

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

val b = a.map(_.clone)

【讨论】:

    【解决方案3】:

    只需转置两次

    a.transpose.transpose
    

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多