[英]copy 2-dimensional Array
我想复制一个二维数组。 我想使用for循环来做到这一点,但我有一个想法,但我无法完成其余的工作。
def copy(bild:Array[Array[Int]]):Unit = {
for(x <- 0 until bild.length)
for(y <- 0 until bild(x).length) {
bild(x)(y) =
//i don't know how to create the new array
}
}
您也可以使用clone
方法!
def copy(bild: Array[Array[Int]]): Unit = {
val copy = bild.clone
}
更新:
由于Array [Int]仍然是可变引用,因此克隆仍无法解决问题。..正如Andriy Plokhotnyuk在评论中所提到的。
问题:
val og = Array(Array(1, 2, 3), Array(4,5,6)) //> og : Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))
val copy = og.clone //> copy : Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))
copy(0)(0) = 7
og //> res2: Array[Array[Int]] = Array(Array(7, 2, 3), Array(4, 5, 6))
copy //> res3: Array[Array[Int]] = Array(Array(7, 2, 3), Array(4, 5, 6))
在这里,任何要copy
更新也将反映给og
。
索尔:
因此,我首先还需要克隆Array [Int]。
val og = Array(Array(1, 2, 3), Array(4,5,6)) //> og : Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))
val copy = og.map(_.clone) //> copy : Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))
copy(0)(0) = 7
og //> res2: Array[Array[Int]] = Array(Array(1, 2, 3), Array(4, 5, 6))
copy //> res3: Array[Array[Int]] = Array(Array(7, 2, 3), Array(4, 5, 6))
因此,在问题中重构复制方法。
def copy(bild: Array[Array[Int]]): Unit = {
val copy = bild.map(_.clone)
}
def copy(bild: Array[Array[Int]]):Unit = {
val result = Array.ofDim[Array[Int]](bild.length)
for(x <- 0 until bild.length) {
result(x) = Array.ofDim[Int](bild(x).length)
for(y <- 0 until bild(x).length) {
result(x)(y) = bild(x)(y)
}
}
}
非常简单:
scala> Array.ofDim[Int](3)
//res0: Array[Int] = Array(0, 0, 0)
scala> Array.ofDim[String](4)
//res1: Array[String] = Array(null, null, null, null)
您也可以使用Array.tabulate
方法:
val source = Array.fill[Int](5, 5)(1)
val target = Array.tabulate[Int](5, 5)((x, y) => source(x)(y))
复制二维数组最简单的方法是array.clone
,但是如果您想通过理解自己进行array.clone
,则可以使用以下代码:
def copy[A](arr: Array[Array[A]]) = for (x <- 0 until arr.length) yield for (y <- 0 until arr(x).length) yield arr(x)(y)
这将为您提供一个Vector[Vector[A]]
。
对于大型阵列更有效:
scala> :paste
// Entering paste mode (ctrl-D to finish)
def copyOf(as: Array[Array[Int]]): Array[Array[Int]] = {
val cas = Array.ofDim[Array[Int]](as.length)
for(i <- 0 until as.length) {
val a = as(i)
cas(i) = java.util.Arrays.copyOf(a, a.length)
}
cas
}
// Exiting paste mode, now interpreting.
copyOf: (as: Array[Array[Int]])Array[Array[Int]]
scala> Array(Array(0, 1), Array(2, 3))
res0: Array[Array[Int]] = Array(Array(0, 1), Array(2, 3))
scala> copyOf(res0)
res1: Array[Array[Int]] = Array(Array(0, 1), Array(2, 3))
scala> res0(0)(0) = 7
scala> res0
res3: Array[Array[Int]] = Array(Array(7, 1), Array(2, 3))
scala> res1
res4: Array[Array[Int]] = Array(Array(0, 1), Array(2, 3))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.