2010-04-10 14 views
13

Sie haben:Scala Feldinitialisierung

val array = new Array[Array[Cell]](height, width) 

Wie initialisieren Sie alle Elemente auf neue Zelle ("etwas")?

Danke, Etam (neu zu Scala).

Antwort

16
val array = Array.fill(height)(Array.fill(width)(new Cell("something"))) 
+5

Dies ist schöner als vonFunction, aber es erfordert Scala 2.8. Beachten Sie, dass Sie nur die zweidimensionale Version von fill verwenden können: 'Array.fill (Höhe, Breite) (neue Zelle (" etwas "))'. – sepp2k

7
val array = Array.fromFunction((_,_) => new Cell("something"))(height, width) 

Array.fromFunction übernimmt eine Funktion, die für die Anordnung zurückkehren sollte das Element durch diese Argumente (dh f (x, y) beschrieben, n ganzzahlige Argumente und gibt das Element für die Position in der Matrix nimmt (x) (y)) und dann n Ganzzahlen, die die Dimensionen des Arrays in einer separaten Argumentliste beschreiben.

19
Welcome to Scala version 2.8.0.r21376-b20100408020204 (Java HotSpot(TM) Client VM, Java 1.6.0_18). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> val (height, width) = (10,20) 
height: Int = 10 
width: Int = 20 

scala> val array = Array.fill(height, width){ new Cell("x") } 
array: Array[Array[Cell[java.lang.String]]] = Array(Array(Cell(x), Cell(x), ... 
scala> 
5

Unter der Annahme, das Array bereits erstellt wurde, können Sie diese verwenden:

for { 
    i <- array.indices 
    j <- array(i).indices 
} array(i)(j) = new Cell("something") 

Wenn Sie bei der Erstellung initialisiert werden können, die anderen Antworten sehen.