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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。