Pelle Månsson pisze:
Piotrek wrote:
Bill Baxter pisze:
On Sun, Oct 18, 2009 at 1:12 PM, Piotrek <[email protected]> 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?
Yes!
Is there any time you are interested in the keys without the values?
Yes!
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.
The answer is simple. I can reuse AA in many different functions.
Sometimes I need keys other time values and even... both :) That isn't
the issue. The problem was about what should return short version of
foreach over AA.
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.
See above.
Cheers
Piotrek