Array

Einstieg
Arrays erzeugen
Zugriff auf die Elemente
Mehrdimensionale Array

Einstieg

Ein Scala-Array ist eine sequenzielle Abfolge von Objekten gleichen Typs. So ist zum Beispiel ein Array[Int] eine Folge von Objekten des Typs Int. Die Länge eines Scala-Arrays wird bei dessen Initialisierung festgelegt und kann nachträglich nicht verändert werden. Die einzelnen Elemente eines Arrays können jedoch ausgetauscht werden, was dazu führt, dass ein Scala-Array ein veränderlicher Datentyp ist.

Arrays erzeugen

Das nachfolgende Beispiel zeigt die Initialisierung eines Array für Elemente des Typs Int, mit Platz für drei Elemente. Nach der Initialisierung des Array werden Int Elemente dem Array zugeordnet. Das Beispiel zeigt auch, dass der Zugriff auf Array - Elemente 0 basierend ist (das erste Element eines Arrays hat den Index 0).

var myInts = new Array[Int](3)
myInts(0) = 3
myInts(1) = 1
myInts(2) = 2          
          

Dieses Array lässt sich auch in kürzerer Weise erzeugen, was nachfolgendes Beispiel zeigt. Beide Quelltextvarianten erzeugen identische Arrays.

var myInts = Array[Int](3,2,1)          
          

Scala ist in der Lage den Parametertyp aus den initialisierenden Werten abzuleiten. Daher kann die Angabe des Typs [Int] auch weggelassen werden:

var myInts = Array(3,2,1)
          

Zugriff auf die Elemente

Die allgemeine Form des Zugriffs auf die Elemente eines Arrays hat folgende Form:

myInts.apply(1)          
          

Dieser Zugriff kann auch in der Kurzschreibweise erfolgen:

myInts(1)          
          

Auffällig ist, dass in Scala runde statt die aus Java gewöhnten eckigen Klammern verwendet werden. Dies liegt einfach darin, dass auch wenn man myInts(1) verwendet, der Compiler dies in myInts.apply(1) übersetzt. Der Zugriff auf ein Element eines Arrays ist somit ein gewöhnlicher Methodenaufruf.

Mehrdimensionale Arrays

Die Möglichkeiten direkt über den Konstruktor mehrdimensionale Arrays in Scala zu erzeugen sind als deprecated gekennzeichnet, d.h, wir sollten diese Form nicht mehr benutzen. Der aktuelle Quelltextstand zu Scala 2.10 (4.11.2011) zeigt zudem, dass Arrays von Arrays val myMulArray = new Array[Array[Double]](2,3) in Scala 2.10 nicht mehr kompilieren wird. Auf multidimensionale Arrays brauchen wir dennoch nicht zu verzichten. Das Companion Objekt von Array bietet uns mehrere Factory-Methoden Array.ofDim[T](...) zur Erzeugung von ehrdimensionalen Arrays mit bis zu 5 Dimensionen an.

Das nachfolgende Beispiel zeigt die Erzeugung und Verwendung eines 2-dimensionalen Arrays.

object MultiArray  {
  def main(args: Array[String]) {
    val myMulArray = Array.ofDim[Double](2,3)
    myMulArray(0)(0) = 1.0
    myMulArray(0)(1) = 2.0
    myMulArray(0)(2) = 3.0
    myMulArray(1)(0) = 4.0
    myMulArray(1)(1) = 5.0
    myMulArray(1)(2) = 6.0
    
    println(myMulArray(1)(2))
    
    myMulArray.foreach(_.foreach(println(_)))
  }
}
timpt.de - X2H V 0.11

Die Ausführung des Programms führt zu folgender Ausgabe auf der Systemausgabe:

6.0
1.0
2.0
3.0
4.0
5.0
6.0