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) ENDFORergibt
"ABC" "10" "TRUE"
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.
Arrays können addiert werden. Beispiel (A und B seien Arrays):
C := A + BDie 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 123Werte, 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
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) ENDFORergibt
Dach Pfanneaber
FORALL _key1 IN A print (_key1) ENDFORergibt
Haus BettWichtig: 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) ENDFORergibt
Dach doch # angenommen, doch ist auch enthalten PfanneMö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) ENDFORergibt
Pfanne Dachoder
FORALL _key IN A ("KEY") print (s) ENDFORergibt
Bett Haus
toposoft GmbH 1. Oktober 2012