Arrays 如何在Scala中高效地将一个数组复制到另一个数组?
如何使用另一种方法将Arrays 如何在Scala中高效地将一个数组复制到另一个数组?,arrays,scala,Arrays,Scala,如何使用另一种方法将数组复制到另一个数组 我的想法是使用=操作符。例如: val A = Array(...) val B = A 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) 但这没关系吧 第二种方法是对循环使用,例如: val A = Array(...) val B =
数组
复制到另一个数组
我的想法是使用=
操作符。例如:
val A = Array(...)
val B = A
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)
但这没关系吧
第二种方法是对循环使用,例如:
val A = Array(...)
val B = A
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)
val A=Array(…)
val B=new Array[](A.length)//这里假设类型与A相同
对于(i您可以使用.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)
考虑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)
注意:ScalaArray.copy
相当于JavaSystem.arraycopy
,支持多态数组。最短的惯用方法是将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)
他们是不同的
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
另一个选项是使用A
作为变量参数序列创建新数组B
:
val B=Array(A:*)
需要注意的重要一点是,使用相等运算符C=A
,将导致C
指向原始数组A
。这意味着更改C
将更改A
:
scala>vala=Array(1,2,3,4)
A:Array[Int]=数组(1,2,3,4)
scala>val B=数组(A:*)
数组[Int]=数组(1,2,3,4)
scala>val C=A
C:Array[Int]=数组(1,2,3,4)
scala>B(0)=9
scala>A
res1:Array[Int]=数组(1,2,3,4)
scala>B
res2:Array[Int]=数组(9,2,3,4)
scala>C(0)=8
scala>C
res4:Array[Int]=数组(8,2,3,4)
scala>A
res5:Array[Int]=数组(8,2,3,4)
我想知道,是否有其他方法来处理这个问题?非常感谢!搜索一个小时后,这就是我要寻找的!如果它是aval
,你如何修改b
?即使b是val阻止我们将其重新分配给其他值,数组也是可变的。虽然这是正确的,但我可以想到非常few解释了为什么有人想要创建一个数组的副本。大多数实际用例需要复制到不同大小的数组中。