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.