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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
