Lars T. Kyllingstad wrote:
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
I think foreach should be consistent with opIn, that is,
if (foo in aa) { //it is in the aa.
  foreach (f; aa) { // loop over each item in the aa
    //I expect foo to show up in here, since it is "in" the aa.
  }
}

I use key iteration more than I use value iteration, and it is what I am used to. It is, as you say, a matter of preference.

Reply via email to