Piotrek wrote:
Bill Baxter pisze:
On Sun, Oct 18, 2009 at 1:12 PM, Piotrek <star...@tlen.pl> wrote:
Bill Baxter pisze:
I think the default should be to iterate over whatever 'in' looks at.

I was almost convinced, because that rule has a sense. But treating normal
arrays and associative array has more sense to me.


fun (SomeObject object) {
foreach (element;object.arr1){ //normal, but how do I know at first look
//just do something with element
}

foreach (element;object.arr2){ // assoc, but how do I know at first look
//just do something with element hopefully not index
}

That sounds like an argument that there should be no default, because
either way it's not clear whether you're iterating over keys or
values.


Really?! That wasn't my intention :) In both cases I wish it were values ;)

> Just get rid of the the one-argument foreach over AAs altogether and force the user to be
 > explicit about it.

I wouldn't do so. Would anybody do an error by thinking that foreach (elem,table) should iterate over keys?

Maybe I'm not thinking correctly but for me an assoc array is just an array with additional key (index) features thanks to which I save space and/or have more indexing method than only integers.


e.g.

Normal array

No.       Item
0    George
1    Fred
2    Dany
3    Lil

Index/key is infered from position (offset)


Now Assoc array:

No.    Item
10    Lindsey
21    Romeo
1001    C-Jay

Or
No.    Item
first    Europe
second    South America
third    Australia

Or
Names occurrence frequency:

No. Item
Andy    21
John    23
Kate    12

And the only difference is the need for using a hash function for value lookup (calculate position) which should not bother a user when he doesn't care.

Then when you ask somebody to iterate over the tables, what he will do almost for certain? If it would be me, you know... values all the time. Even for last example most important values are those numbers (despite in this case they're meaningless without keys).

Cheers
Piotrek



Put it this way:
 Is there any time you are interested in the values without the keys?
 Is there any time you are interested in the keys without the values?

If you're not interested in the keys, the real question would be why you are using an associative array instead of just an array.

I can think of at least one example of when you want key iteration, which would be when using a bool[T] as a set.

Reply via email to