On 03/29/2015 05:19 PM, w0rp wrote: > 4. I ended up writing my own library hashmap, which when I tested ages > ago competed with the standard associative array in terms of > performance. This allows me to mark many things @safe pure nothrow. > > Destroy!
Nice docs. Always use open addressing when implementing a hash table. https://github.com/D-Programming-Language/dmd/pull/4088 https://github.com/higgsjs/Higgs/pull/170 > Also, I was able to implement setDefault in a hopefully efficient > manner. I have tried to push setDefault as an awesome thing a few times, > but I've never been able to explain why it's good eloquently. I guess that's the counterpart to `get(key, default)` that also inserts the default value. That's a very much needed primitive for our AA, because currently you end up doing at least 1 unnecessary lookup. Often I even write this. auto p = key in aa; if (p is null) { aa[key] = default; p = key in aa; } It's called getOrElseUpdate in Scala, but I'd prefer getOrSet. http://www.scala-lang.org/api/2.10.1-RC1/scala/collection/mutable/HashMap.html#getOrElseUpdate(A,⇒B):B
