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;