當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Enum用法及代碼示例


Elixir語言中 Enum 相關用法介紹如下。

提供一組算法來處理枚舉。

在 Elixir 中,可枚舉是實現 Enumerable 協議的任何數據類型。 List s ( [1, 2, 3] )、 Map s ( %{foo: 1, bar: 2} ) 和 Range s ( 1..3 ) 是用作可枚舉的常用數據類型:

iex> Enum.map([1, 2, 3], fn x -> x * 2 end)
[2, 4, 6]

iex> Enum.sum([1, 2, 3])
6

iex> Enum.map(1..3, fn x -> x * 2 end)
[2, 4, 6]

iex> Enum.sum(1..3)
6

iex> map = %{"a" => 1, "b" => 2}
iex> Enum.map(map, fn {k, v} -> {k, v * 2} end)
[{"a", 2}, {"b", 4}]

但是,該語言中存在許多其他可枚舉項,例如 MapSet s 和 File.stream!/3 返回的數據類型,它允許像遍曆文件一樣遍曆文件。

該模塊中的函數以線性時間工作。這意味著,執行操作所需的時間與可枚舉的長度以相同的速度增長。這在諸如 Enum.map/2 之類的操作中是預期的。畢竟,如果我們要遍曆列表中的每一個元素,列表越長,我們需要遍曆的元素越多,需要的時間也就越長。

這種線性行為也應該出現在 count/1 member?/2 at/2 等類似操作上。盡管 Elixir 確實允許數據類型為此類操作提供高性能變體,但您不應期望它始終可用,因為 Enum 模塊旨在處理多種數據類型,並非所有數據類型都可以提供優化的行為.

最後,請注意 Enum 模塊中的函數是即刻的:它們一被調用就會遍曆枚舉。這在使用無限枚舉時尤其危險。在這種情況下,您應該使用 Stream 模塊,它允許您延遲表達計算,而不需要遍曆集合,並且可以使用可能無限的集合。有關示例和文檔,請參閱 Stream 模塊。

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Enum。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。