Associative Arrays

Accessing a missing key with aa[key] throws RangeError. Use in, get, or require.

Iteration order is unspecified. Keys must be hashable (toHash + opEquals for custom types).

int[string] ages;                         // key: string, value: int
ages["Ana"] = 30;
ages["Bo"] = 25;
auto lit = ["one": 1, "two": 2];          // literal
writeln(ages["Ana"], " ", ages.length);
if ("Bo" in ages) writeln("found");
if (auto p = "Cy" in ages) writeln(*p);   // `in` returns a pointer (or null)
writeln(ages.get("Zed", -1));             // default if missing
ages.require("Dan", 0)++;                 // insert if missing and return a ref
ages.update("Ana", () => 1, (ref int v) { v++; });   // create or update
ages.remove("Bo");
foreach (name, age; ages) writeln(name, ": ", age);
writeln(ages.keys, ages.values);
foreach (k; ages.byKey) {}
foreach (kv; ages.byKeyValue) writeln(kv.key, kv.value);
auto copy = ages.dup;
ages.clear();

int[][string] multi;                      // values are arrays
multi["a"] ~= 1;
string[int][string] nested;