より間違いにくく、より可読性の高い繰り返しができるDの機能であるforeachループです。
int[]型の配列arrがあるとき、foreachループを使って要素を
反復処理することができます:
foreach (int e; arr) {
writeln(e);
}
foreachの最初のパラメータは繰り返し内で使われる変数名です。
その型は自動的に推論されます:
foreach (e; arr) {
// typeof(e) は int
writeln(e);
}
2つ目のフィールドは配列、または次のセクションで紹介される レンジと呼ばれる特殊な反復可能オブジェクトでなければいけません。
要素は繰り返しの間に配列またはレンジからコピーされます。
これは基本型においては好ましいことですが、大きな型においては問題かもしれません。
コピーするのを防ぐ、またはインプレースの変化を有効にするには、refが使えます:
foreach (ref e; arr) {
e = 10; // 値を上書きする
}
n回反復Dはn回実行しなければならない繰り返しを、..文によりより簡潔に書くことができます:
foreach (i; 0..3) {
writeln(i);
}
// 0 1 2
a..bの最後の数字はレンジから除外され、したがってループ本文は3回実行されます。
配列において、また別のインデックス変数にアクセスすることもできます。
foreach (i, e; [4, 5, 6]) {
writeln(i, ":", e);
}
// 0:4 1:5 2:6
foreach_reverseによる逆向きの繰り返しコレクションはforeach_reverseにより逆順で繰り返すことができます:
foreach_reverse (e; [1, 2, 3]) {
writeln(e);
}
// 3 2 1