Array-Objekt

class Array extends Object

Ein Array-Objekt enthält eine Liste oder Sequenz von Werten.

Der Zugriff auf Werte erfolgt über ihre Position im Array (auch Array-Index genannt), wobei Position 1 das erste Element ist.

Arrays werden häufig erstellt, indem eine Liste von Werten in eckige Klammern gesetzt wird. Zum Beispiel:

veg := ["Spargel", "Brokkoli", "Gurke"]
Loop veg.Length
    MsgBox veg[A_Index]

Ein negativer Index kann verwendet werden, um auf Elemente in umgekehrter Richtung zuzugreifen, d.h. -1 ist das letzte Element, -2 ist das vorletzte Element usw.

Der Versuch, einen Array-Index zu verwenden, der außerhalb der Grenzen liegt (z.B. 0 oder wenn sein Absolutwert größer als die Länge des Arrays ist), wird als Fehler gewertet und bewirkt, dass ein IndexError ausgelöst wird. Der beste Weg, neue Elemente zum Array hinzuzufügen, ist der Aufruf von InsertAt oder Push. Zum Beispiel:

Benutzer := Array()
Benutzer.Push A_UserName
MsgBox Benutzer[1]

Ein Array kann auch erweitert werden, indem Length ein größerer Wert zugewiesen wird. Dadurch ändert sich, welche Indizes gültig sind, aber Has zeigt an, dass die neuen Elemente keinen Wert haben. Elemente ohne Wert werden typischerweise für variadische Aufrufe oder von variadischen Funktionen verwendet.

"ArrayObj" wird hier stellvertretend für ein beliebiges Array-Objekt verwendet, da "Array" die Klasse selbst ist.

Zusätzlich zu den von Object geerbten Methoden und Eigenschaften haben Array-Objekte die folgenden vordefinierten Methoden und Eigenschaften.

Inhaltsverzeichnis

Statische Methoden

Call

Erstellt ein neues Array, das die angegebenen Werte enthält.

ArrayObj := Array(Wert, Wert2, ..., WertN)
ArrayObj := Array.Call(Wert, Wert2, ..., WertN)

Parameter sind durch __New definiert.

Methoden

Clone

Gibt eine flache Kopie eines Arrays zurück.

Klon := ArrayObj.Clone()

Alle Array-Elemente werden in das neue Array kopiert. Objektreferenzen werden kopiert (wie bei einer normalen Zuweisung), nicht die Objekte selbst.

Eigene Eigenschaften, eigene Methoden und Basis werden wie bei Obj.Clone kopiert.

Delete

Entfernt den Wert eines Array-Elements und hinterlässt den Index ohne Wert.

EntfernterWert := ArrayObj.Delete(Index)

Parameter

Index

Typ: Integer

Ein gültiger Array-Index.

Rückgabewert

Typ: Beliebig

Diese Methode gibt den entfernten Wert zurück (leer, wenn es keinen gibt).

Bemerkungen

Diese Methode hat keinen Einfluss auf die Länge des Arrays.

Es wird ein ValueError ausgelöst, wenn Index außerhalb des Bereichs liegt.

Get

Gibt den Wert eines bestimmten Index oder einen Standardwert zurück.

Wert := ArrayObj.Get(Index , Standardwert)

Diese Methode bewirkt folgendes:

Wenn Standardwert weggelassen wird, ist dies äquivalent zu ArrayObj[Index], außer dass __Item nicht aufgerufen wird.

Has

Gibt eine Zahl ungleich 0 zurück, wenn der Index gültig ist und einen Wert hat.

HatIndex := ArrayObj.Has(Index)

InsertAt

Fügt einen oder mehrere Werte auf einer bestimmten Position ein.

ArrayObj.InsertAt(Index, Wert1 , Wert2, ... WertN)

Parameter

Index

Typ: Integer

Die Position, auf der Wert1 eingefügt werden soll. Nachfolgende Werte werden auf Index+1, Index+2 usw. eingefügt. Die Angabe von 0 entspricht der Angabe von Length + 1.

Wert1 ...

Typ: Beliebig

Ein oder mehrere Werte, die eingefügt werden sollen. Um ein Array von Werten einzufügen, übergeben Sie dasArray* als letzten Parameter.

Bemerkungen

InsertAt ist das Gegenstück zu RemoveAt.

Alle Elemente, die sich auf oder rechts von Index befinden, werden nach rechts verschoben. Fehlende Parameter werden ebenfalls eingefügt, aber ohne Wert. Zum Beispiel:

x := []
x.InsertAt(1, "A", "B") ; =>  ["A", "B"]
x.InsertAt(2, "C")      ; =>  ["A", "C", "B"]

; Fehlende Elemente bleiben erhalten:
x := ["A", , "C"]
x.InsertAt(2, "B")      ; =>  ["A", "B",    , "C"]

x := ["C"]
x.InsertAt(1, , "B")    ; =>  [   , "B", "C"]

Es wird ein ValueError ausgelöst, wenn Index kleiner als -ArrayObj.Length oder größer als ArrayObj.Length + 1 ist. Bei einem Array mit z.B. 3 Elementen muss Index im Bereich von -3 bis 4 liegen.

Pop

Entfernt das letzte Array-Element und gibt es zurück.

EntfernterWert := ArrayObj.Pop()

Alle folgenden sind äquivalent:

EntfernterWert := ArrayObj.Pop()
EntfernterWert := ArrayObj.RemoveAt(ArrayObj.Length)
EntfernterWert := ArrayObj.RemoveAt(-1)

Wenn das Array leer ist (Length ist 0), wird ein Error ausgelöst.

Push

Fügt Werte am Ende eines Arrays an.

ArrayObj.Push(Wert, Wert2, ..., WertN)

Parameter

Wert ...

Typ: Beliebig

Ein oder mehrere Werte, die eingefügt werden sollen. Um ein Array von Werten einzufügen, übergeben Sie dasArray* als letzten Parameter.

RemoveAt

Entfernt Elemente aus einem Array.

EntfernterWert := ArrayObj.RemoveAt(Index)
ArrayObj.RemoveAt(Index, Länge)

Parameter

Index

Typ: Integer

Der Index eines oder mehrerer Werte, die entfernt werden sollen.

Länge

Typ: Integer

Wenn weggelassen, wird nur ein Element entfernt. Andernfalls geben Sie die Länge des Wertebereichs an, der entfernt werden soll.

Rückgabewert

Typ: Beliebig

Wenn Länge weggelassen wird, wird der entfernte Wert zurückgegeben (leer, wenn keine entfernt wurden). Andernfalls gibt es keinen Rückgabewert.

Bemerkungen

RemoveAt ist das Gegenstück zu InsertAt.

Es wird ein ValueError ausgelöst, wenn der via Index und Länge angegebene Bereich nicht vollständig innerhalb der aktuellen Grenzen des Arrays liegt.

Die restlichen Elemente rechts von Pos werden um den via Länge definierten Wert (oder standardmäßig um 1) nach links verschoben. Zum Beispiel:

x := ["A", "B"]
MsgBox x.RemoveAt(1)  ; A
MsgBox x[1]           ; B

x := ["A", , "C"]
MsgBox x.RemoveAt(1, 2)  ; 1
MsgBox x[1]              ; C

__New

Fügt Elemente an. Äquivalent zu Push.

ArrayObj.__New(Wert, Wert2, ..., WertN)

Diese Methode existiert zur Unterstützung von Call und ist nicht für den direkten Aufruf gedacht. Siehe Konstruktion und Destruktion.

__Enum

Enumeriert Array-Elemente.

For Wert in ArrayObj
For Index, Wert in ArrayObj

Gibt einen neuen Enumerator zurück. Diese Methode wird typischerweise nicht direkt aufgerufen. Stattdessen wird das Array-Objekt direkt an eine For-Schleife übergeben, die __Enum einmal aufruft und dann den Enumerator pro Schleifenwiederholung einmal aufruft. Jeder Aufruf des Enumerators gibt das nächste Array-Element zurück. Die Variablen der For-Schleife entsprechen den folgenden Parametern des Enumerators:

Index

Typ: Integer

Der Array-Index, typischerweise derselbe wie A_Index. Dies ist nur im 2-Parameter-Modus verfügbar.

Wert

Typ: Beliebig

Der Wert (wenn es keinen gibt, bekommt Wert den Status uninitialisiert).

Eigenschaften

Length

Ermittelt oder setzt die Länge eines Arrays.

Länge := ArrayObj.Length
ArrayObj.Length := Länge

Die Länge berücksichtigt Elemente, die keinen Wert haben. Eine Erhöhung der Länge ändert, welche Indizes als gültig angesehen werden, aber die neuen Elemente haben keinen Wert (wie von Has angezeigt). Eine Verringerung der Länge kürzt das Array.

MsgBox ["A", "B", "C"].Length  ;  3
MsgBox ["A",    , "C"].Length  ;  3

Capacity

Ermittelt oder setzt die aktuelle Kapazität eines Arrays.

MaxElemente := ArrayObj.Capacity
ArrayObj.Capacity := MaxElemente

MaxElemente ist ein Integer, der die maximale Anzahl von Elementen repräsentiert, die das Array enthalten kann, bevor es automatisch erweitert werden muss. Wenn ein Wert kleiner als Length gesetzt wird, werden Elemente entfernt.

Default

Definiert den Standardwert, der bei Elementen ohne Wert zurückgegeben wird.

ArrayObj.Default := Wert

Diese Eigenschaft ist standardmäßig nicht vorhanden, kann aber via Skript definiert werden. Wenn definiert, wird ihr Wert durch __Item oder Get zurückgegeben, wenn das angeforderte Element keinen Wert hat, anstatt einen UnsetItemError auszulösen. Die Eigenschaft kann mit den üblichen Mitteln implementiert werden, einschließlich einer dynamischen Eigenschaft oder einer Metafunktion, aber um festzustellen, welcher Schlüssel abgefragt wurde, müsste stattdessen __Item oder Get überschrieben werden.

Das Setzen eines Standardwerts verhindert nicht, dass ein Fehler ausgelöst wird, wenn der Index außerhalb des Bereichs liegt.

__Item

Ermittelt oder setzt den Wert eines Array-Elements.

Wert := ArrayObj[Index]
Wert := ArrayObj.__Item[Index]
ArrayObj[Index] := Wert
ArrayObj.__Item[Index] := Wert

Index ist ein Integer, der einen gültigen Array-Index repräsentiert, d.h. ein Integer mit einem Absolutwert im Bereich von 1 bis Length. Ein negativer Index kann verwendet werden, um auf Elemente in umgekehrter Richtung zuzugreifen, d.h. -1 ist das letzte Element, -2 ist das vorletzte Element usw. Der Versuch, einen Index zu verwenden, der außerhalb der Grenzen liegt (z.B. 0 oder wenn sein Absolutwert größer als die Länge des Arrays ist), wird als Fehler gewertet und bewirkt, dass ein IndexError ausgelöst wird.

Der Eigenschaftsname __Item wird typischerweise weggelassen, wie oben gezeigt, ist aber nützlich, um die Eigenschaft zu überschreiben.