grauzone: > In a perfect world, iterating over an AA would yield a tuple (key, > value). You could iterate over either the keys or values by iterating > over a "view" on the key or value list. I'm surprised Python doesn't do > that.
I don't know why Python has originally chosen to iterate on just keys, maybe it's a performance optimization (iterating on pairs is slower, because a single reference needs no allocation, while a tuple of 2 may need it, in practice CPython uses the same memory for the tuple, avoiding allocating it at every loop cycle), or maybe for one of the reasons I've explained. I don't know if D can make looping on key-value of built-in AAs as fast as iterating on just keys or just values. Iterating on AA keys or values is a very common operation that must be fast. > (I'm expecting that Andrei will replace the .key and .value properties > by "lazy" ranges, that don't allocate memory; so that aspect will be > alright. At least, the range of the keys supports a O(1) opIn_r, I hope :-) Bye, bearophile