- Offizieller Beitrag
Hi,
vielleicht bietet diese UDF-Sammlung all jenen, die mit Arrays auf Kriegsfuß stehen, einen kleinen Lichtblick.
Ich habe hier die Arrayfunktionen so gestaltet, dass der Zugriff ananlog zur objektbasierten ArrayList erfolgt. Da für das Objekt das nicht zwingend installierte NET-Framework erforderlich ist, ist diese reine AutoIt-Lösung sicher eine gute Ergänzung.
Für einige Funktionen ist die Angabe der CaseSensitivity erforderlich. Da dieses Verhalten für mehrere Funktionen gilt, wird diese Eigenschaft für das gesamte Array deklariert.
EDIT
Eh ich's vergesse, der Vorteil für 'Array-Problematiker' : Keinerlei Größenverwaltung notwendig, Index muß nicht verwendet werden.
Funktionsübersicht
_AssocArray_Create(CaseSensitive)
Erstellt ein Assoziatives Array mit der definierten Eigenschaft.
Mit -1 = Nicht Sensitive (Standard), mit 1 = Case Sensitive.
Diese ist gültig für alle auf dieses Array angewendete Funktionen.
Das Setzen der Eigenschaft in den HighWord-Bereich von Array[0] dient der Unterscheidung zu
'normalen' Array. -1 statt 0 deshalb, da _WinAPI_HiWord() 0 zurückgibt, wenn kein DWORD-Wert
abgefragt wird.
Gibt das Handle des Array zurück.
_AssocArray_Pref(Handle)
Gibt die Eigenschaft des Assoziativen Array zurück.
_AssocArray_Add(Handle, Wert)
Fügt einen Wert zum Array hinzu.
_AssocArray_AddColl(Handle, Kollektion, Trennzeichen, Ignore_0)
Fügt eine Kollektion (1D-Array od. mit Trenner gesplitteter String) zum Array hinzu.
Standardtrennzeichen (Zeichen von Opt("GUIDataSeparatorChar"))
Ist das EinfügeArray 0-basiert, muß das Flag Ignore_0 auf 'False' gesetzt werden.
_AssocArray_Insert(Handle, Index, Wert)
Fügt einen Wert am gegebenen Index ein.
_AssocArray_Count(Handle)
Gibt die Anzahl der Elemente im Array zurück.
_AssocArray_DelByName(Handle, Wert, All)
Löscht den ersten gefundenen Eintrag, der mit Wert übereinstimmt.
Mit Flag All auf 'True' werden alle dem Wert entsprechenden Einträge gelöscht.
_AssocArray_DelByIndex(Handle, Index)
Löscht den Eintrag am übergebenen Index.
_AssocArray_Clear(Handle)
Löscht alle Elemente aus dem Array.
_AssocArray_Sort(Handle, Richtung)
Sortiert alle Elemente des Array (Standard: aufsteigend).
_AssocArray_ToString(Handle, Trennzeichen)
Gibt einen String mit allen Elementen,
getrennt durch Trennzeichen (Zeichen von Opt("GUIDataSeparatorChar")), zurück.
_AssocArray_GetItem(Handle, Index)
Gibt den Inhalt an der Indexposition zurück.
_AssocArray_GetRange(Handle, Index, Anzahl)
Gibt ab Indexposition eine Anzahl Elemente als Assoziatives Array zurück.
Eigenschaft des abgefragten Array wird übernommen.
_AssocArray_SetRange(Handle, EinfügeArray, Index, Ignore_0)
Kopiert die Elemente eines (Assoziativen)Array über einen Bereich von Elementen im Array.
Enthält das EinfügeArray mehr Elemente als ab Index überschrieben werden können,
wird das Basisarray vergrößert.
Ist das EinfügeArray 0-basiert, muß das Flag Ignore_0 auf 'False' gesetzt werden.
_AssocArray_InsertRange(Handle, EinfügeArray, Index, Ignore_0)
Fügt an der Indexposition ein (Assoziatives)Array ein.
Für das eingefügte Array gilt die Eigenschaft des Zielarray.
Ist das EinfügeArray 0-basiert, muß das Flag Ignore_0 auf 'False' gesetzt werden.
_AssocArray_Search(Handle, Wert)
Gibt TRUE zurück, wenn Wert im Array enthalten, sonst FALSE.
_AssocArray_GetIndex(Handle, Wert)
Gibt den Index des ersten gefundenen Eintrags zurück, der mit Wert übereinstimmt.
_AssocArray_LastIndexOf(Handle, Wert, Von, Bis)
Gibt den nullbasierten Index des letzten Vorkommens eines Werts im Array bzw. in einem Abschnitt davon zurück.
_AssocArray_RemoveRange(Handle, Index, Anzahl)
Löscht eine Anzahl Elemente ab Indexposition.
Wird keine Anzahl übergeben, oder überschreitet die Anzahl die Arraygrenze,
werden ab Indexposition alle restlichen Elemente gelöscht.
_AssocArray_Reverse(Handle, Von, Bis)
Kehrt die Reihenfolge der Elemente im angegebenen Bereich um.
Beispiele
#include <AssocArray.au3>
; Array erstellen, Standardeigenschaft 'Nicht Case Sensitive'
$array = _AssocArray_Create()
ConsoleWrite('Eigenschaft: ' & _AssocArray_Pref($array) & @CRLF)
[/autoit] [autoit][/autoit] [autoit]; Element hinzufügen
_AssocArray_Add($array, 'AutoIt')
; Inhalt als String ausgeben, Trennzeichen von Opt("GUIDataSeparatorChar")
ConsoleWrite('Inhalt als String: ' & _AssocArray_ToString($array) & @CRLF)
; Kollektion als String hinzufügen
_AssocArray_AddColl($array, 'mama|papa|oma|opa|onkel|tante|mama')
ConsoleWrite('AddColl String: ' & _AssocArray_ToString($array) & @CRLF)
; Kollektion als Array einfügen
Local $ar[3] = [1,2,3]
_AssocArray_AddColl($array, $ar, Default, False)
ConsoleWrite('AddColl Array: ' & _AssocArray_ToString($array) & @CRLF)
; Vorkommen eines Wertes prüfen
ConsoleWrite('Wert enthalten: ' & _AssocArray_Search($array, 'opa') & @CRLF)
; Wert einfügen an Indexposition
_AssocArray_Insert($array, 5, 'mama')
ConsoleWrite('Insert an Index 5: ' & _AssocArray_ToString($array) & @CRLF)
; Wert von Indexposition zurückgeben
ConsoleWrite('Wert von Index 4: ' & _AssocArray_GetItem($array, 4) & @CRLF)
; Index für einen Wert zurückgeben
ConsoleWrite('Index des Wertes, erstes Auftreten: ' & _AssocArray_GetIndex($array, 'mama') & @CRLF)
; Index für einen Wert, letztes Auftreten
ConsoleWrite('Index des Wertes, letztes Auftreten: ' & _AssocArray_LastIndexOf($array, 'mama') & @CRLF)
; Bereich als Array zurückgeben
$b = _AssocArray_GetRange($array, 2, 4)
ConsoleWrite('Das Array: ' & _AssocArray_ToString($array) & @CRLF)
ConsoleWrite('Der selektierte Bereich: ' & _AssocArray_ToString($b) & @CRLF)
; Bereich überschreiben
Local $c[3] = ['X','Y','Z']
_AssocArray_SetRange($array, $c, 6, False)
ConsoleWrite('ab Index 6 überschrieben: ' & _AssocArray_ToString($array) & @CRLF)
; Array sortieren
; Kopie erstellen
$copy_ar = $array
_AssocArray_Sort($array)
ConsoleWrite('sortiert aufsteigend: ' & _AssocArray_ToString($array) & @CRLF)
_AssocArray_Sort($copy_ar, 1)
ConsoleWrite('sortiert fallend: ' & _AssocArray_ToString($copy_ar) & @CRLF)
; Wert am Index löschen
_AssocArray_DelByIndex($array, 3)
ConsoleWrite('an Index 3 gelöscht: ' & _AssocArray_ToString($array) & @CRLF)
; Wert nach Namen löschen, erstes Auftreten
_AssocArray_DelByName($array, 'mama')
ConsoleWrite('erstes Auftreten "mama" gelöscht: ' & _AssocArray_ToString($array) & @CRLF)
; Wert nach Namen löschen, jedes Auftreten
_AssocArray_DelByName($array, 'mama', True)
ConsoleWrite('jedes Auftreten "mama" gelöscht: ' & _AssocArray_ToString($array) & @CRLF)
; Reihenfolge im Array umkehren
_AssocArray_Reverse($array)
ConsoleWrite('umgedreht: ' & _AssocArray_ToString($array) & @CRLF)