当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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