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