Menu

Foreach

Особенности foreach в D позволяют уменьшить возможность ошибок и улучшить читаемость кода для перебора элементов.

Перебор элементов

Для заданного массива arr типа int[] можно перебрать все его элементы, используя цикл foreach:

foreach (int e; arr) {
    writeln(e);
}

Первое поле в определении foreach - это переменная, используемая для организации цикла. Её тип вычисляется автоматически:

foreach (e; arr) {
    // typeof(e) is int
    writeln(e);
}

Второе поле должно быть массивом, либо специальным поддерживающим перебор объектом, называемом range (диапазон), о котором будет рассказано в следующем разделе.

Доступ по ссылке

Во время перебора элементы массива или диапазона будут скопированы. Это допустимо для основных типов, но может стать проблемой для больших типов. Для предотвращения копирования или для того, чтобы изменять оригинальные значения, можно использовать ref:

foreach (ref e; arr) {
    e = 10; // перезаписать значение
}

Обратный перебор с помощью foreach_reverse

Коллекцию можно перебрать в обратном порядке с помощью foreach_reverse:

foreach_reverse (e; [1, 2, 3]) {
    writeln(e);
}
// 3 2 1

Подробнее

rdmd playground.d