Home

Awesome

HashTable

HashTable is an improvement on storing items in AutoHotkey Objects.

With HashTable you can

:warning: Hash tables are inherently unordered. When enumerating a hash table, do not expect to process keys in sorted order or insertion order. If you need to process keys in a certain order, store them in that order in an Array and enumerate that while operating on the HashTable or use something other than a hash table (like an AVL tree).

:warning: Mutating a hash table while enumerating it might cause items to be processed more than once or skipped. You can get the desired effect by enumerating a clone of the HashTable while mutating the HashTable you intend to keep.

:warning: Floating-point keys are rarely useful because it is rarely safe to compare the result of a floating-point calculation exactly. Deduplicating floating-point results and converting mathematical constants to their names are examples of valid uses.

:warning: Object keys are rarely useful because they are indexed by their address. Two objects might behave identically in every way, but if they are not the same object (stored in the same location in memory), they will not be associated with the same value. Recording visited nodes in a graph traversal algorithm is an example of a valid use.

Design contains the reasons for the design decisions.

HashTable is compatible with AutoHotkey v1.

Installation

HashTable.ahk must be placed in a library directory.

Usage

HashTable’s constructor accepts items as Arrays containing a key and a value, in that order.

HashTable supports the following methods:

Get(Key)
Set(Key, Value)

Get(Key) reads the value associated with a key.

Set(Key, Value) writes the value associated with a key.

HashTable also supports the following interfaces from Object:

Delete(Key)
Count()
_NewEnum()
HasKey(Key)
Clone()

HashTable will throw an exception when attempting to get or delete a nonexistent key.