On 2/7/13 5:20 PM, Dan wrote:
For an associative array, what is the best idiom that allows for
checking if a key exists in the AA. If it does do something with the
value, if not initialize the value and then do something with it.
In this code: http://dpaste.dzfl.pl/daab318f
How would this piece be improved? It looks like it would have to perform
the hash and do a find 3 times:
auto exists = (k in _dataMap);
if(!exists) {
_dataMap[k] = init;
exists = (k in _dataMap);
}
... use *exists
At a higher level and assuming the general goal of this basic struct is
clear, any other suggestions welcome.
Also, an FYI to dpaste maintainer that the compiler service has been
unavailable for a while.
Thanks
Dan
In Ruby you can do this:
h = Hash.new(0) # 0 is the default value if the key is not present
Now you can do:
h[0] += 3 #=> {0 => 3}
h[1] = 4 #=> {0 => 3, 1 => 4}
You can even initialize a hash with a lambda that computes the initial
value based on a key:
h = Hash.new { |hash, key| hash[key] = key * 2 }
h[10] #=> 20
I guess in D you would create a struct that wraps an associative array
and adds that logic.