2013-04-02 5 views
16

Das klingt vielleicht einfach, aber ich kann es einfach nicht richtig machen.scala 2 dimensional array

Wie erstellt man ein zweidimensionales Array mit der Größe 100 von 60 in Scala? Angenommen, ich habe die Klasse Abcd und ich möchte ein zweidimensionales Array von Abcd erstellen. Ich habe mit dem folgenden Code versucht, funktioniert aber nicht.

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

Es beklagt „zu viele Argumente für Konstruktor Array“

+0

Die ewige Verwirrung: Es gibt keine mehrdimensionale sind Arrays, nur Array von Array (von Array (von Array ...)). –

+0

Das ist möglicherweise in einigen Sprachen richtig, aber konzeptionell ist es falsch, und Sprachen sollten diesem Konzept folgen. – Elazar

+0

Sprachen sollten dem entsprechen, was algorithmisch ausgedrückt wird, nicht was im Gedächtnis ist (Leute, wir verwenden hier nicht Assembly ...) - und es ist eine abscheuliche Sünde, dies mit einer * FUNCTIONAL * Programmiersprache seit Mathe und Comp zu behaupten Sci funktioniert nicht auf diese Weise. JA WIRKLICH??? – Svartalf

Antwort

37

Die derzeit empfohlene Methode ist ofDim zu verwenden:

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

Oder wenn Sie Ihr Array mit ABCD Anfang haben, statt Nullen

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

oder wenn die ABCD in einigen regelmäßigen Weise variieren von Position

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

Meinten Sie Array.tabulate [ABCD] (100,6) {(i, j) => neu ABCD (i, j)}? –

4

Ich weiß, diese Frage beantwortet wird, sondern ein Problem, das ich in lief war, dass @ alexwriteshere-Lösung und @ Küken Lösung war nur gut, wenn man eine Matrix will.

Um mit einem zweidimensionalen Array zu erstellen (wenn als erste Anzahl von Zeilen dann Anzahl der Spalten betrachtet), so etwas tun:

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