2009-12-08 5 views
6

Come si esegue una copia profonda di un array 2D in Scala?Copia profonda di array 2D in Scala?

Per esempio

val a = Array[Array[Int]](2,3) 
a(1,0) = 12 

voglio val b per copiare i valori di una, ma senza puntare allo stesso array.

+0

Questo non è un codice valido nel tuo esempio. Puoi riformattare? –

+0

La discussione di un argomento simile può essere trovata a:

risposta

0

Dato:

val a = Array[Array[Int]] 

si potrebbe provare:

for(inner <- a) yield { 
    for (elem <- inner) yield { 
    elem 
    } 
} 

una domanda più profonda è perché si vuole fare farlo con int? L'intero scopo dell'utilizzo di tipi immutabili è quello di evitare esattamente questo tipo di costrutto.

Se si dispone di un più generico Array[Array[T]], allora la vostra preoccupazione principale è come clonare l'istanza di T, non come profonda clone matrice.

+2

Gli array in Scala sono array Java e quindi mutabili. –

5

È possibile utilizzare il metodo clone della classe Array. Per un multidimensionale Array, utilizzare map sulle dimensioni extra. Per il vostro esempio, si ottiene

val b = a.map(_.clone) 
1

Basta recepirla due volte

a.transpose.transpose 
+0

Horribly heavyweight, but cool :) –