Các mô-đun tiêu chuẩn std.range và std.algorithm cung cấp nhiều hàm và phép hợp những hàm này cho phép diễn tả đơn giản những phép tính toán phức tạp, với các đơn vị là các dải (range).
Những thuật toán dải phát huy hiệu quả ngay cả với các (kiểu) dải do bạn định nghĩa.
filter
- Áp dụng phép lọc các phần tử của dải dựa vào
hàm không tên (lamda) ở phần tham số mẫu:
filter!"a > 20"(range);
filter!(a => a > 20)(range);
map
- Phát sinh dải mới nhờ vào hàm cung cấp ở phần tham số mẫu:
[1, 2, 3].map!(x => to!string(x));
each
- Một phiên bản khác của foreach
áp dụng trên dải
[1, 2, 3].each!(a => writeln(a));
take
- Tạo dải với N phần tử đầu tiên từ dải khác
theBigBigRange.take(10);
zip
- duyệt qua hai dải cùng lúc và tạo ra dải các cặp, mỗi cặp
gồm phần từ thấy ở hai dải trong cùng phép duyệt
assert(zip([1,2], ["hello","world"]).front
== tuple(1, "hello"));
generate
- phép sinh lấy một hàm, sinh ra một dải từ hàm đó, rồi
dùng dải thu được làm đầu vào cho hàm trong bước tiếp theo:
alias RandomRange = generate!(() => uniform(1, 1000));
cycle
- dải vô tận có được bằng cách lặp đi lặp lại dải đầu vào
auto c = cycle([1]);
// không bao giờ rỗng
assert(!c.empty);
Tài liệu về các thuật toán dải trong hai thư viện đã nêu.