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.

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

Reply via email to