Revamping associative arrays

Chris Nicholson-Sauls ibisbasenji at gmail.com
Sun Oct 18 20:28:09 PDT 2009


BCS wrote:
> Hello Chris Nicholson-Sauls,
> 
>> Andrei Alexandrescu wrote:
>>
>>> Associative arrays are today quite problematic because they don't
>>> offer any true iteration. Furthermore, the .keys and .values
>>> properties create new arrays, which is wasteful.
>>>
>>> Another issue with associative arrays is that ++a[k] is hacked, which
>>> reflects a grave language limitation. That needs to be replaced with
>>> a true facility.
>>>
>>> Any other issues with AAs that you want to see fixed, and ideas
>>> guiding a redesign?
>>>
>>> Thanks,
>>>
>>> Andrei
>>>
>> Idea: the .keys and .values properties, rather than creating arrays,
>> could create iterable ranges with the smallest possible footprint,
>> internally walking the tree structure.
>>
> 
> what will this do?
> 
> foreach(key; aa.keys)
>   if(Test(key))
>      aa.remove(key);
> 
> 

Pre-cache a pointer to the next node in sequence; two pointers is still better than an 
arbitrarily long on-the-fly array.  Its my understanding that AA trees do not 
automatically rebalance, so the sequence isn't going to (otherwise) change on a removal. 
End of the sequence means a null "next" pointer.

For that matter: how common is looping over keys just to remove select ones versus other 
purposes in looping just the keys?

-- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list