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.

Reply via email to