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 funktioniert seit Scala 2.10 nicht mehr (val myMulArray = new Array[Array[Double]](2,3)). 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 mehrdimensionalen Arrays mit bis zu 5 Dimensionen an.

Das nachfolgende Beispiel zeigt die Erzeugung und Verwendung eines 2-dimensionalen Arrays mit Hilfe einer Factory - Methode.

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(_)))
  }
}

itmapa.de - X2H V 0.18

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
            

Eine weitere Möglichkeit ein mehrdimensionales Array zu erzeugen besteht darin die einzelnen Ebenen des Arrays einzeln zu konstruieren und diesen dann die "Datenarrays" zuzuweisen.

Im nachfolgenden Beispiel erzeugen wir auf diese Weise ein 2 - dimensionales Array mit Double - Werten, wobei das entstehende 2 -dimensionale Array eine Dreiecksform aufweist.

object ArrayArray {
  def main(args: Array[String]): Unit = {
    // creation
    val dim2 = new Array[Array[Int]](5)
    for (i <- 0 until dim2.length) {
      dim2(i) = new Array[Int](i+1)
      for (j <- 0 until dim2(i).length) dim2(i)(j) = i + j
    }
    // output
    for (i <- 0 until dim2.length) {
      for (j <- 0 until dim2(i).length) print(dim2(i)(j))
      println
    }
  }
}
itmapa.de - X2H V 0.21

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

0
12
234
3456
45678