[Inhalt] [Zurück] [Weiter] [Thema] [Index]

Arrays


Der Typ Array (Feld) stellt gegenüber klassischen Programmiersprachen eine Besonderheit dar. In Azur ist, wie z.B. in perl, jedes Feld ein assoziatives Array. Es hat den Basistyp String und wird auch mit Strings indiziert. Weil der Indextyp also nicht angeordnet ist, ist es auch das Array nicht, es gibt keine festgelegte Reihenfolge der Elemente.

Der Zugriff erfolgt mittels des []-Operators, auch auf der linken Seite einer Zuweisung. Das Ergebnis eines Zugriffs ist stets ein String.

Beispiel:

   Std["Montag"] := "8"
   Std["Dienstag"] := Std["Montag"]
Für Index und Wert können neben String alle weiteren Typen benutzt werden. Diese werden automatisch in Strings umgewandelt. Der Ausdruck
   A["10"] := "34"
ist identisch mit
   A[10] := 34

Wenn auf einen nicht vorhandenen Index zugegriffen wird, wird ein Leerstring geliefert.

Wenn alle Indexe eines Arrays Zahlen sind, werden sie intern so gespeichert, dass das Array numerisch sortiert wird, wenn es nach Key durchlaufen wird.

Beispiel

	A[1] := "ABC"
	A[5] := 10
	A["10"] := True
	
	FORALL s IN A ("KEY")
		print (s)
	ENDFOR
ergibt
	"ABC"
	"10"
	"TRUE"

Arrays von Arrays

Arrays können als Wert in einem Array abgespeichert werden.

A := Array() B := Array() B[1] := A

Um den String, der beim Zugriff auf B[1] geliefert wird, zurück in ein Array zu wandeln, steht die Funktion StrToArray() zur Verfügung. Arrays können auf diese Weise beliebig tief geschachtelt werden.

Addieren von Arrays

Arrays können addiert werden. Beispiel (A und B seien Arrays):

	C := A + B
Die Arrays A und B bleiben unverändert. Das Ergebnis C enthält alle Elemente aus A und B. Gibt es einen Index, der in A und in B vorkommt, so ist die eindeutige Zuordnung von Index zu Wert nicht gewährleistet. In diesem Falle werden alle Indexe verworfen und den Werten aus A und B neue Indexe zugeordnet. Beispiel:
	A := Array()
	A[1] := 10
	A["Haus"] := "Dach"
	A["Bett"] := "Pfanne"
	
	B := StrToArray("Hund Katze Maus")
	# B[0]="Hund", B[1]="Katze", B[2]="Maus"
	
	C := A + B
	# B[1]="Katze" und A[1]=10 haben den gleichen Index
	# deshalb wird neu nummeriert. Es gilt dann
	# C[1]=10, C[2]="Pfanne", C[3]="Dach", C[4]="Hund", C[5]="Katze", C[6]="Maus"

Arrays können mit dem Operator += erweitert werden. Beispiel:

	A := Array()
	A += "Dach"
	A += "Pfanne"
	A += 123
	print (A)
ergibt
	0 Dach
	1 Pfanne
	2 123
Werte, die mit dem Operator += aufgenommen werden, erhalten als Index die Arraygröße. Wenn an diesem Index bereits ein Wert steht, wird der Index solange hochgezählt, bis einer frei wird. Beispiel:
	A := Array()
	A[3] := "Dach"
	A[4] := "Pfanne"
	A += "Maus"
	A += "Hund"
	print (A)
ergibt
	2 Maus
	3 Dach
	4 Pfanne
	5 Hund


FORALL und Arrays

Ein Array kann mit FORALL durchlaufen werden. Der Schleifenvariable werden normalerweise die Werte zugeordnet. Um die Indexe zu durchlaufen, nennt man die Schleifenvariable _key... (die ersten vier Buchstaben sind entscheidend). Beispiel:

   FORALL s IN A
      print (s)
   ENDFOR
ergibt
   Dach
   Pfanne
aber
   FORALL _key1 IN A
      print (_key1)
   ENDFOR
ergibt
   Haus
   Bett
Wichtig: beide Schleifen durchlaufen das Array sortiert nach Wert! Großbuchstaben werden vor Kleinbuchstaben gereiht. Wenn die Groß-Klein-Schreibung außer Acht gelassen werden soll, fügt man hinter dem Array das Schlüsselwort ("ICASE") an. Beispiel:
   FORALL s IN A ("ICASE")
      print (s)
   ENDFOR
ergibt
   Dach
   doch # angenommen, doch ist auch enthalten
   Pfanne
Möchte man die Elemente in der Sortierreihenfolge des Index' durchlaufen, so gibt man hinter dem Array das Schlüsselwort ("KEY") an. Beispiel:
   FORALL s IN A ("KEY")
      print (s)
   ENDFOR
ergibt
   Pfanne
   Dach
oder
   FORALL _key IN A ("KEY")
      print (s)
   ENDFOR
ergibt
   Bett
   Haus


toposoft GmbH 1. Oktober 2012