On Wed, Oct 29, 2014 at 11:33:53PM +0000, Freddy via Digitalmars-d wrote:
> On Wednesday, 29 October 2014 at 19:55:14 UTC, H. S. Teoh via
> Digitalmars-d wrote:
[...]
> >And how would it be implemented in a way that is stable across AA
> >implementations?
> >
> >
> >--T
> in std.range
> ----
> auto byKeyPair(R)(R r) if(isAssociativeRange!R){
>       return zip(r.byKey,r.byValue);
> }
> ----

This is not stable across AA implementations.  There is no guarantee
that byKey and byValue will return elements in the same order. The
current implementation does, but it's a shaky assumption.

Besides, it wastefully keeps two iterators over the AA, whereas a proper
native implementation would only need a single one.

In any case, this is a backwards approach. What we *should* have started
with, is an iteration over key/value pairs, with byKey and byValue
implemented on top of that, rather than the other way round.

If it weren't for the std.typecons.Tuple issue, we'd already have a
proper AA byPair by now. But perhaps there is a way to work around this,
if the AA interface can export a "raw" iteration function that can be
wrapped in Phobos to produce a range of key/value Tuples... It wouldn't
be the prettiest solution, but might be the best we can do right now
since we can't import Phobos from druntime.


T

-- 
Windows 95 was a joke, and Windows 98 was the punchline.

Reply via email to