Een array is een verzameling van elementen die samen onder één naam zitten. In
C# noemen we zo’n verzameling ook wel een collection. Tot nu toe overliep je
de elementen van een array met een for-lus en een index: je telde een
indexvariabele op van 0 tot het aantal elementen, en gebruikte die index om bij
elk element te geraken.
Heel vaak wil je gewoon alle elementen één voor één overlopen, zonder dat je de index zelf nodig hebt. Daarvoor bestaat er een handigere lus: de foreach-lus.
De foreach-lus loopt automatisch over elk element van een array of collection. Bij elke ronde stopt ze het volgende element in een variabele die je zelf een naam geeft.
foreach (int element in getallen)
{
// statements: deze worden uitgevoerd voor elk element
}
Je leest dit als: “voor elk element (een int) in getallen, doe het
volgende”. De onderdelen:
| Onderdeel | Wat het betekent |
|---|---|
int | Het type van de elementen in de array. Bij een array van gehele getallen is dat int, bij een array van strings string, ... |
element | De naam die jij kiest voor de variabele. Bij elke ronde bevat ze het volgende element van de array. |
getallen | De array (of collection) waarvan je de elementen wil overlopen. |
Je hoeft dus zelf geen indexvariabele bij te houden, geen getallen.Length te
schrijven en geen getallen[i] te gebruiken: de foreach-lus regelt dat allemaal.
Stel dat we een array met enkele getallen hebben, en die allemaal willen tonen op het scherm:
int[] getallen = { 3, 8, 1, 4 };
foreach (int getal in getallen)
{
Console.WriteLine(getal);
}
De lus draait vier keer, want er zitten vier elementen in de array. Bij de eerste
ronde is getal gelijk aan 3, dan 8, dan 1, en ten slotte 4. De uitvoer
is dus:
3
8
1
4
Wil je hetzelfde doen met een for-lus, dan zou je dit moeten schrijven:
int[] getallen = { 3, 8, 1, 4 };
for (int i = 0; i < getallen.Length; i++)
{
Console.WriteLine(getallen[i]);
}
Beide lussen doen exact hetzelfde, maar de foreach-versie is korter en
leesbaarder. Je hoeft je niet bezig te houden met de index, en je kan dus ook
geen fout maken met de grenzen (bijvoorbeeld <= in plaats van <).
Gebruik de foreach-lus wanneer je alle elementen wil overlopen en de index
zelf niet nodig hebt. Heb je de positie wel nodig (bijvoorbeeld “toon het
3de element” of “vergelijk element i met element i+1”), dan blijf je beter bij
de for-lus.
Belangrijke beperking. Met een foreach-lus kan je de elementen alleen uitlezen, niet wijzigen. De variabele in de lus (
getalin het voorbeeld) is een kopie van het element. Als je die kopie aanpast, verandert de array zelf niet. Wil je de inhoud van een array écht aanpassen, dan moet je dat doen via de index, met een for-lus:getallen[i] = ....