Eine Datenstruktur, welche ich nahezu täglich verwende (z.B. über das Scripting.Dictionary-Objekt) ist die Hash-Tabelle.
Wie diese funktioniert war mir zwar in den absoluten Grundzügen klar, aber im Grunde war es dann eben doch eher eine Art Blackbox für mich.
Das wollte ich nun ändern und ein tieferes Verständnis für die Funktionsweise einer Hash-Tabelle erlangen.
Was gibt es da für einen besseren Ansatz als einfach mal selbst eine komplette Hash-Tabelle in AutoIt zu implementieren?
Herausgekommen ist dabei folgende UDF.
Diese ist ausdrücklich lediglich als Übungsprojekt zum Verständnis gedacht und kann nicht mit z.B. Scripting.Dictionary mithalten (habe ich auch gar nicht erst getestet). (wie sich herausgestellt hat, kann diese bei einer großen Elementanzahl eben DOCH mithalten).
Einige Dinge bergen auch noch deutliches Optimierungspotential (z.B. eine vernünftige Hash-Funktion) und sind erst einmal nur für das grundsätzliche Funktionieren implementiert.
Wer sich jedoch wie ich ein bisschen mehr mit Hash-Tabellen auseinander setzen möchte, dem kann eventuell diese UDF beim Verständnis ein wenig weiterhelfen.
Kurzes Beispiel damit jeder sieht, dass sie tatsächlich funktioniert:
#include "hashtable.au3"
Global $aTable = _hashtable_Create()
_hashtable_Add($aTable, "Banane", "Der Wert zu Key Banane")
_hashtable_Add($aTable, "Apfel", "Der Wert zu Key Apfel")
_hashtable_Add($aTable, "Aprikose", "Der Wert zu Key Aprikose")
_hashtable_Add($aTable, "Apfelsine", "Der Wert zu Key Apfelsine")
; remove element:
_hashtable_Remove($aTable, "Apfel")
; get value by key:
$value = _hashtable_Get($aTable, "Aprikose")
MsgBox(0, "Der Wert zu Aprikose", $value)
; get the Keys as an array
$aKeys = _hashtable_getKeys($aTable)
_ArrayDisplay($aKeys, "The keys of the hash-table", "", 64)
; get the values as an array
$aValues = _hashtable_getValues($aTable)
Alles anzeigen