foreach() loops can be used to iterate over the elements of an array or mapping . The array form is:
foreach (<var> in <expr>) {
...
}
Where <expr> is any expression that returns an array. For example,
int x;
foreach (x in ({ 1, 2, 3, 4 })) {
printf("%i ", x);
}
is exactly the same as doing:
int x, i, n;
int *y = ({ 1, 2, 3, 4 })
n = sizeof(y);
for (i = 0; i < n; i++) {
x = y[i];
printf("%i ", x);
}
Note that <expr> is only evaluated once, at the start of the loop. The usual loop commands, like break and continue , work within foreach loops as well.
The second form is used to iterate over a mapping :
foreach (<var>, <var> in <expr>) {
...
}
Each time through the loop, the first var is set to a key from the mapping , and the second is set to the corresponding value, so:
int x, y;
foreach (x, y in ([ 1 : 2, 3 : 4, 5 : 6 ]) ) {
printf("%i : %i\n", x, y);
}
is the same as the considerably more complex:
int x, y;
mapping m = ([ 1 : 2, 3 : 4, 5 : 6 ]);
int *k = keys(m);
int n = sizeof(k);
for (int i = 0; i < n; i++) {
x = k[i];
y = m[x];
printf("%i : %i\n", x, y);
}
See also the summary of loops .
Beek @ZorkMUD, Lima Bean, IdeaExchange, TMI-2, and elsewhere