Fun project - faster associative array algorithm

w0rp via Digitalmars-d digitalmars-d at puremagic.com
Tue Apr 7 11:14:34 PDT 2015


I'll also take this chance to once again plug 'setDefault' as a 
useful associative array primitive. It's in my library. I don't 
care what name is used for it, just the semantics. Nowak 
suggested 'getOrSet', which is a good name.

// A string -> int[] map
HashMap!(string, int[]) map;

// set an element as usual.
map["a"] = [1, 2, 3];

// Returns [1, 2, 3], by reference, and appends 4 to it.
map.setDefault("a") ~= 4

// Finds nothing in the map currently, returns (int[]).init by 
reference,
// now created in the map, appends to that.
map.setDefault("b") ~= 1

assert(map["b"] == [1]);

// setDefault with a lazy parameter.
int[] arr = map.setDefault("matey", [1, 2]);

assert(arr == [1, 2] && arr == map["matey"]);


More information about the Digitalmars-d mailing list