
- Elixir 教程
- Elixir - 首頁
- Elixir - 概述
- Elixir - 環境
- Elixir - 基本語法
- Elixir - 資料型別
- Elixir - 變數
- Elixir - 運算子
- Elixir - 模式匹配
- Elixir - 決策
- Elixir - 字串
- Elixir - 字元列表
- Elixir - 列表和元組
- Elixir - 關鍵字列表
- Elixir - 對映
- Elixir - 模組
- Elixir - 別名
- Elixir - 函式
- Elixir - 遞迴
- Elixir - 迴圈
- Elixir - 可列舉物件
- Elixir - 流
- Elixir - 結構體
- Elixir - 協議
- Elixir - 檔案I/O
- Elixir - 程序
- Elixir - 符號
- Elixir - 列表推導
- Elixir - 型別規範
- Elixir - 行為
- Elixir - 錯誤處理
- Elixir - 宏
- Elixir - 庫
- Elixir 有用資源
- Elixir - 快速指南
- Elixir - 有用資源
- Elixir - 討論
Elixir - 流
許多函式都期望一個可列舉物件並返回一個列表。這意味著,在使用 Enum 執行多個操作時,每個操作都會生成一箇中間列表,直到我們得到最終結果。
與 Enum 的急切操作相反,流支援惰性操作。簡而言之,流是惰性的、可組合的可列舉物件。這意味著流只有在絕對需要時才會執行操作。讓我們來看一個例子來理解這一點:
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 模組提供的函式相同的函式,這些函式在對輸入可列舉物件執行計算後,會生成列表作為返回值。其中一些列在下面的表格中:
序號 | 函式及其描述 |
---|---|
1 |
chunk(enum, n, step, leftover \\ nil) 將可列舉物件分成塊進行流式處理,每個塊包含 n 個專案,每個新塊從可列舉物件的 step 個元素開始。 |
2 |
concat(enumerables) 建立一個流,該流列舉可列舉物件中的每個可列舉物件。 |
3 |
each(enum, fun) 對每個專案執行給定的函式。 |
4 |
filter(enum, fun) 建立一個流,根據列舉上給定的函式過濾元素。 |
5 |
map(enum, fun) 建立一個流,它將在列舉上應用給定的函式。 |
6 |
drop(enum, n) 惰性地從可列舉物件中刪除接下來的 n 個專案。 |
廣告