レンジアルゴリズム

標準モジュールstd.rangestd.algorithm は、構成要素としてレンジを基本にした、より読みやすい方法で複雑な 操作を表現することができる多くの優れた関数を提供します。

これらのアルゴリズムの素晴らしい点はただレンジを定義するだけで すでにある標準ライブラリから直接利益を受けられるところです。

std.algorithm

filter - テンプレート引数としてラムダを取り、要素をフィルタした新しいレンジを生成します:

filter!"a > 20"(range);
filter!(a => a > 20)(range);

map - テンプレートパラメータとして定義された述語を使って新しいレンジを生成します:

[1, 2, 3].map!(x => to!string(x));

each - レンジを噛み砕く関数としての手軽なforeachです:

[1, 2, 3].each!(a => writeln(a));

std.range

take - N個の要素へ制限します:

theBigBigRange.take(10);

zip - 2つのレンジを同時に処理しその2つからタプルを返します:

assert(zip([1,2], ["hello","world"]).front
  == tuple(1, "hello"));

generate - 関数を取り各反復処理でそれを呼びレンジを生成します、たとえば:

alias RandomRange = generate!(x => uniform(1, 1000));

cycle - 与えられた入力のレンジを永遠に繰り返すレンジを返します。

auto c = cycle([1]);
// レンジは空になりません!
assert(!c.empty);

ドキュメントはあなたの訪問を待っています!

掘り下げる

rdmd playground.d