associative arrays: iteration is finally here
Lars T. Kyllingstad
public at kyllingen.NOSPAMnet
Wed Oct 28 13:37:14 PDT 2009
Pelle Månsson wrote:
> Lars T. Kyllingstad wrote:
>> Pelle Månsson wrote:
>>> Andrei Alexandrescu wrote:
>>>> Pelle Månsson wrote:
>>>>> 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.
>>
>>
>> I've used iteration over values more often than iteration over keys.
>>
>> Besides, I think consistency is important. Since the default for an
>> ordinary array is to iterate over the values, it should be the same
>> for associative arrays.
>>
>> -Lars
> I don't understand this, when do you want the values without the keys?
> If you do, shouldn't you be using a regular array?
Here's an example:
class SomeObject { ... }
void doStuffWith(SomeObject s) { ... }
void doOtherStuffWith(SomeObject s) { ... }
// Make a collection of objects indexed by ID strings.
SomeObject[string] myObjects;
...
// First I just want to do something with one of the
// objects, namely the one called "foo".
doStuffWith(myObjects["foo"]);
// Then, I want to do something with all the objects.
foreach (obj; myObjects) doOtherStuffWith(obj);
Of course, if iteration was over keys instead of values, I'd just write
foreach (id, obj; myObjects) doOtherStuffWith(obj);
But then again, right now, when iteration is over values and I want the
keys I can just write the same thing. It all comes down to preference,
and I prefer things the way they are now. :)
> Actually, it doesn't matter all that much, as long as we get .keys and
> .values as alternatives.
I still think the default for foreach should be consistent with normal
arrays.
-Lars
More information about the Digitalmars-d
mailing list