2010-03-22 21 views
7

Was ist die empfohlene Methode zum Erstellen eines vorbelegten zweidimensionalen Arrays in Scala? Ich habe den folgenden Code:Erstellen und Befüllen eines zweidimensionalen Arrays in Scala

val map = for { 
    x <- (1 to size).toList 
} yield for { 
     y <- (1 to size).toList 
    } yield (x, y) 

Wie mache ich ein Array statt Liste? Das Ersetzen von .toList durch .toArray wird nicht kompiliert. Und gibt es eine präzisere oder lesbarere Methode als das Verschachteln von Ausdrücken?

Antwort

9

Auf Scala 2.7, verwenden Array.range:

for { 
    x <- Array.range(1, 3) 
} yield for { 
    y <- Array.range(1, 3) 
} yield (x, y) 

Auf Scala 2.8, verwenden Array.tabulate:

Array.tabulate(3,3)((x, y) => (x, y)) 
+0

Array.tabulate scheint süß, und sieht aus wie Array.fromFunction von Rex Kerr in einer anderen Antwort vorgeschlagen. Was ist der Unterschied (abgesehen von der Tatsache, dass ich sehe Array.fromFunction ist in 2.8 veraltet)? Und wie funktionieren sie eigentlich? – asteinlein

+0

@asteinlein Ich bin mir nicht sicher über 'fromFunction' - ich hatte es vorher nie bemerkt - aber' tabulate' (das auf 'List' auf Scala 2.7 vorhanden ist) funktioniert ziemlich genau wie das Verständnis, das du geschrieben hast '0 bis Größe' statt' 1 zur Größe'. Auf Scala 2.7 ist es jedoch nur eindimensional, also müssten Sie sie verschachteln. Auf Scala 2.8 können Sie mehrere Dimensionen angeben (bis zu 5, glaube ich). –

+0

Danke. Für alle anderen Interessierten funktioniert das sehr gut unter 2.7: List.tabulate (3, x => List.tabulate (3, y => (x, y)) .zuArray) .toArray – asteinlein

2

unter anderen Möglichkeiten, können Sie Gebrauch verwenden Array.range und map:

scala> Array.range(0,3).map(i => Array.range(0,3).map(j => (i,j))) 
res0: Array[Array[(Int, Int)]] = Array(Array((0,0), (0,1), (0,2)), Array((1,0), (1,1), (1,2)), Array((2,0), (2,1), (2,2))) 

Oder Sie können Array.fromFunction verwenden:

scala> Array.fromFunction((i,j) => (i,j))(3,3)      
res1: Array[Array[(Int, Int)]] = Array(Array((0,0), (0,1), (0,2)), Array((1,0), (1,1), (1,2)), Array((2,0), (2,1), (2,2))) 

Scala 2.8 bieten Ihnen noch mehr Optionen - Blick durch das Array Objekt . (Eigentlich ist das ein guter Rat für 2.7, auch ....)

Verwandte Themen