Elixir語言中 Enum.reduce
相關用法介紹如下。
用法一
reduce(enumerable, fun)
@spec reduce(t(), (element(), acc() -> acc())) :: acc()
使用累加器為enumerable
中的每個元素調用fun
。
如果 enumerable
為空,則引發
。Enum.EmptyError
enumerable
的第一個元素用作累加器的初始值。然後,使用下一個元素和累加器調用該函數。函數返回的結果遞歸地用作下一次迭代的累加器。 enumerable
完成後,返回最後一個累加器。
由於可枚舉的第一個元素用作累加器的初始值,因此fun
隻會執行n - 1
次,其中n
是可枚舉的長度。此函數不會為 one-element 長的枚舉調用指定的函數。
如果您希望對累加器使用其他值,請使用
。Enum.reduce/3
例子
iex> Enum.reduce([1, 2, 3, 4], fn x, acc -> x * acc end)
24
用法二
reduce(enumerable, acc, fun)
@spec reduce(t(), acc(), (element(), acc() -> acc())) :: acc()
使用累加器為enumerable
中的每個元素調用fun
。
累加器的初始值為 acc
。使用累加器為可枚舉中的每個元素調用該函數。函數返回的結果作為下一次迭代的累加器。該函數返回最後一個累加器。
例子
iex> Enum.reduce([1, 2, 3], 0, fn x, acc -> x + acc end)
6
減少作為構建塊
Reduce(有時稱為 fold
)是函數式編程的基本構建塊。
模塊中幾乎所有的函數都可以在reduce之上實現。這些函數通常依賴於由運行時優化的其他操作,例如 Enum
。Enum.reverse/1
例如,我們可以用
來實現reduce/3
,如下所示:map/2
def my_map(enumerable, fun) do
enumerable
|> Enum.reduce([], fn x, acc -> [fun.(x) | acc] end)
|> Enum.reverse()
end
在上麵的示例中,
將每次調用 Enum.reduce/3
fun
的結果以相反的順序累積到一個列表中,最後通過調用
正確排序。Enum.reverse/1
實現
、 map/2
等函數是理解 filter/2
背後力量的一個很好的練習。當 Enum.reduce/3
模塊中的任何函數都無法表達操作時,開發人員很可能會求助於 Enum
。reduce/3
相關用法
- Elixir Enum.reduce_while用法及代碼示例
- Elixir Enum.reject用法及代碼示例
- Elixir Enum.reverse_slice用法及代碼示例
- Elixir Enum.reverse用法及代碼示例
- Elixir Enum.random用法及代碼示例
- Elixir Enum.unzip用法及代碼示例
- Elixir Enum.min_max用法及代碼示例
- Elixir Enum.at用法及代碼示例
- Elixir Enum.split_with用法及代碼示例
- Elixir Enum.dedup用法及代碼示例
- Elixir Enum.sum用法及代碼示例
- Elixir Enum.zip用法及代碼示例
- Elixir Enum.find_value用法及代碼示例
- Elixir Enum.product用法及代碼示例
- Elixir Enum.map_join用法及代碼示例
- Elixir Enum.zip_with用法及代碼示例
- Elixir Enum.intersperse用法及代碼示例
- Elixir Enum.flat_map用法及代碼示例
- Elixir Enum.count用法及代碼示例
- Elixir Enum.fetch用法及代碼示例
- Elixir Enum.frequencies用法及代碼示例
- Elixir Enum.drop用法及代碼示例
- Elixir Enum.slice用法及代碼示例
- Elixir Enum.max_by用法及代碼示例
- Elixir Enum.zip_reduce用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Enum.reduce(enumerable, fun)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。