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.

Reply via email to