Thuật toán dải

Các mô-đun tiêu chuẩn std.rangestd.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.

std.algorithm

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));

std.range

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);

Xem thêm

Tài liệu về các thuật toán dải trong hai thư viện đã nêu.

Nâng cao

rdmd playground.d