associative arrays: iteration is finally here

Pelle Månsson pelle.mansson at gmail.com
Wed Oct 28 07:55:17 PDT 2009


Andrei Alexandrescu wrote:
> Pelle Månsson wrote:
>> Andrei Alexandrescu wrote:
>>> Walter has magically converted his work on T[new] into work on making 
>>> associative arrays true templates defined in druntime and not 
>>> considered very special by the compiler.
>>>
>>> This is very exciting because it opens up or simplifies a number of 
>>> possibilities. One is that of implementing true iteration. I actually 
>>> managed to implement last night something that allows you to do:
>>>
>>> int[int] aa = [ 1:1 ];
>>> auto iter = aa.each;
>>> writeln(iter.front.key);
>>> writeln(iter.front.value);
>>>
>>> Two other iterations are possible: by key and by value (in those 
>>> cases iter.front just returns a key or a value).
>>>
>>> One question is, what names should these bear? I am thinking of 
>>> makign opSlice() a universal method of getting the "all" iterator, a 
>>> default that every container must implement.
>>>
>>> For AAs, there would be a "iterate keys" and "iterate values" 
>>> properties or functions. How should they be called?
>>>
>>>
>>> Thanks,
>>>
>>> Andrei
>> aa.each, aa.keys and aa.values seem good names?
> 
> The latter two would break existing definitions of keys and values.
> 
Is this bad? If you want an array from them you could just construct it 
from the iterator.

>> Also, foreach with a single variable should default to keys, in my 
>> opinion.
> 
> That is debatable as it would make the same code do different things for 
> e.g. vectors and sparse vectors.
> 
> 
> Andrei

Debatable indeed, but I find myself using either just the keys or the 
keys and values together, rarely just the values. Maybe that's just me.



More information about the Digitalmars-d mailing list