2013-04-02 10 views
16

Può sembrare facile, ma non riesco a farlo bene.scala scala 2

Come creare un array bidimensionale con dimensione 100 per 60 in Scala? Supposto che io abbia una classe chiamata Abcd e voglio creare una matrice bidimensionale di Abcd. Ho provato con il seguente codice ma non funziona.

var myArray = new Array[Array[Abcd]](100,60) 

Si lamenta "troppi argomenti per costruzione Array"

+0

La confusione perpetua: ci sono multidimensionale array, solo array di array (di array (di array ...)). –

+0

Questo è probabilmente corretto in alcune lingue, ma concettualmente è sbagliato e le lingue dovrebbero seguire questo concetto. – Elazar

+0

Le lingue devono essere conformi a ciò che viene espresso algoritmicamente, non ciò che è nella memoria (gente, non stiamo usando Assembly qui ...) - ed è un peccato atroce rivendicare questo con un linguaggio di programmazione * FUNCTIONAL * dal momento che matematica e Comp Sci non funziona così fuori dagli schemi. VERAMENTE??? – Svartalf

risposta

37

Il modo in cui attualmente raccomandato è quello di utilizzare ofDim:

var myArray = Array.ofDim[Abcd](100, 60) 
23

O se si preferisce avere iniziare il vostro array con ABCD di invece di null

Array.fill[ABCD](100,6) { new ABCD } 

o se l'ABCD variano in modo regolare in base alla posizione

Array.tabulate[ABCD](100,6) { (i,j) => new ABCD(i,j) } 
+0

Intendevi Array.tabulate [ABCD] (100,6) {(i, j) => nuovo ABCD (i, j)}? –

4

So che tale questione venga risolta, ma un problema che ho avuto era che la soluzione @ di alexwriteshere e @ soluzione di Chick era buona solo se si voleva una matrice.

Per poter creare una matrice bidimensionale con (se visto come primo numero di righe allora numero di colonne), fare qualcosa di simile:

val array = Array.ofDim[Array[Char]](2) 
array(0) = Array.ofDim[Char](10) 
array(1) = Array.ofDim[Char](20)