D dispone di un ciclo foreach
che permette un'iterazione
più leggibile e meno soggetta a errori.
Dato un array arr
di tipo int[]
, è possibile
iterare sugli elementi usando un ciclo foreach
:
foreach (int e; arr) {
writeln(e);
}
Il primo parametro in un ciclo foreach
è il nome della variabile
usata per ogni iterazione. Il suo tipo può essere dedotto automaticamente così:
foreach (e; arr) {
// typeof(e) è int
writeln(e);
}
Il secondo campo deve essere un array - o uno speciale oggetto iterabile chiamato range che verrà introdotto nella prossima sezione.
Gli elementi verranno copiati dall'array o dal range durante l'iterazione.
Questo è accettabile per i tipi base, ma potrebbe essere un problema per
tipi più grandi. Per prevenire la copia o per consentire la modifica in-place,
si può usare ref
:
foreach (ref e; arr) {
e = 10; // sovrascrive il valore
}
n
volteD ci permette di scrivere iterazioni che devono essere eseguite
n
volte in modo più conciso con la sintassi ..
:
foreach (i; 0 .. 3) {
writeln(i);
}
// 0 1 2
L'ultimo numero in a .. b
è escluso dal range,
quindi il corpo del ciclo viene eseguito 3
volte.
Per gli array, è anche possibile accedere a una variabile indice separata.
foreach (i, e; [4, 5, 6]) {
writeln(i, ":", e);
}
// 0:4 1:5 2:6
foreach_reverse
Una collezione può essere iterata in ordine inverso con
foreach_reverse
:
foreach_reverse (e; [1, 2, 3]) {
writeln(e);
}
// 3 2 1