2015-09-07 3 views
3

Как я могу использовать другой способ для копирования Array в другой Array?Как эффективно копировать массив в Scala?

Моя мысль заключается в использовании оператора =. Например:

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

Я хочу написать, если есть другой способ справиться с этим? – BranY

ответ

11

Вы можете использовать .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) 
4

Рассмотрим Array.copy в этом примере, где dest является изменяемым Array,

val a = (1 to 5).toArray 
val dest = new Array[Int](a.size) 

a й так

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 с поддержкой полиморфных массивов.

4

Самый короткий и идиоматических способ будет использовать 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.

+0

Большое спасибо !, через один час поиска это то, что я искал! – elbaulp

Смежные вопросы