如何使用其他方式将Array
复制到另一个Array
?
我的想法是使用=
运算符。例如:
val A = Array(...)
val B = A
但这没关系?
第二种方法是使用for loop
,例如:
val A = Array(...)
val B = new Array[](A.length)//here suppose the Type is same with A
for(i <- 0 until A.length)
B(i) = A(i)
答案 0 :(得分:15)
您可以使用.clone
scala> Array(1,2,3,4)
res0: Array[Int] = Array(1, 2, 3, 4)
scala> res0.clone
res1: Array[Int] = Array(1, 2, 3, 4)
答案 1 :(得分:6)
在此示例中考虑Array.copy
dest
是可变的Array
,
val a = (1 to 5).toArray
val dest = new Array[Int](a.size)
等等
dest
Array[Int] = Array(0, 0, 0, 0, 0)
然后
Array.copy(a, 0, dest, 0, a.size)
我们有那个
dest
Array[Int] = Array(1, 2, 3, 4, 5)
来自Scala Array API注意Scala Array.copy
等同于Java System.arraycopy
,支持多态数组。
答案 2 :(得分:6)
最短且惯用的方法是将map
与identity
一起使用,如下所示:
scala> val a = Array(1,2,3,4,5)
a: Array[Int] = Array(1, 2, 3, 4, 5)
制作副本
scala> val b = a map(identity)
b: Array[Int] = Array(1, 2, 3, 4, 5)
修改副本
scala> b(0) = 6
他们似乎不同
scala> a == b
res8: Boolean = false
他们是不同的
scala> a
res9: Array[Int] = Array(1, 2, 3, 4, 5)
scala> b
res10: Array[Int] = Array(6, 2, 3, 4, 5)
此副本适用于所有集合类型,而不仅仅是Array
。
答案 3 :(得分:1)
另一种选择是使用B
作为变量参数序列来创建新数组A
:
val B = Array(A: _*)
要注意的重要一点是,使用等于运算符C = A
会导致C
指向原始数组A
。这意味着更改C
将更改A
:
scala> val A = Array(1, 2, 3, 4)
A: Array[Int] = Array(1, 2, 3, 4)
scala> val B = Array(A: _*)
B: Array[Int] = Array(1, 2, 3, 4)
scala> val C = A
C: Array[Int] = Array(1, 2, 3, 4)
scala> B(0) = 9
scala> A
res1: Array[Int] = Array(1, 2, 3, 4)
scala> B
res2: Array[Int] = Array(9, 2, 3, 4)
scala> C(0) = 8
scala> C
res4: Array[Int] = Array(8, 2, 3, 4)
scala> A
res5: Array[Int] = Array(8, 2, 3, 4)