Elixir-streams

提供:Dev Guides
移動先:案内検索

Elixir-ストリーム

多くの関数は列挙可能なものを期待し、 list を返します。 つまり、Enumを使用して複数の操作を実行している間、各操作は結果に到達するまで中間リストを生成します。

ストリームは、列挙型による積極的な操作ではなく、遅延操作をサポートします。 要するに、* streamsは、レイジーで構成可能な列挙可能要素です*。 つまり、絶対に必要な場合を除き、Streamsは操作を実行しません。 これを理解するための例を考えてみましょう-

odd? = &(rem(&1, 2) != 0)
res = 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum
IO.puts(res)

上記のプログラムが実行されると、次の結果が生成されます-

7500000000

上記の例では、 1..100_000 |> Stream.map(&(&1 3))*は、範囲1..100_000でのマップ計算を表すデータ型、実際のストリームを返します。 この表現はまだ評価されていません。 ストリームは、中間リストを生成する代わりに、基になるストリームをEnumモジュールに渡すときにのみ呼び出される一連の計算を構築します。 ストリームは、大規模な、場合によっては無限のコレクションを操作するときに役立ちます。

ストリームと列挙型には多くの共通の機能があります。 ストリームは主に、入力列挙型の計算を実行した後に戻り値としてリストを生成したEnumモジュールが提供するのと同じ関数を提供します。 それらのいくつかは、次の表に記載されています-

Sr.No. Function and its Description
1

chunk(enum, n, step, leftover \\ nil)

それぞれがn個のアイテムを含むチャンクで列挙型をストリーミングします。各新しいチャンクは列挙型へのステップ要素を開始します。

2

concat(enumerables)

enumerable内の各enumerableを列挙するストリームを作成します。

3

each(enum, fun)

各アイテムに対して指定された関数を実行します。

4

filter(enum, fun)

列挙の指定された関数に従って要素をフィルタリングするストリームを作成します。

5

map(enum, fun)

指定された関数を列挙に適用するストリームを作成します。

6

drop(enum, n)

列挙可能から次のn個のアイテムを遅延ドロップします。