Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在Scala中高效地将一个数组复制到另一个数组?_Arrays_Scala - Fatal编程技术网

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)

注意:Scala
Array.copy
相当于Java
System.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)

我想知道,是否有其他方法来处理这个问题?非常感谢!搜索一个小时后,这就是我要寻找的!如果它是a
val
,你如何修改
b
?即使b是val阻止我们将其重新分配给其他值,数组也是可变的。虽然这是正确的,但我可以想到非常few解释了为什么有人想要创建一个数组的副本。大多数实际用例需要复制到不同大小的数组中。