- Elixir 教程
- Elixir - 首页
- Elixir - 概述
- Elixir - 环境
- Elixir - 基本语法
- Elixir - 数据类型
- Elixir - 变量
- Elixir - 运算符
- Elixir - 模式匹配
- Elixir - 决策
- Elixir - 字符串
- Elixir - 字符列表
- Elixir - 列表和元组
- Elixir - 关键字列表
- Elixir - 映射
- Elixir - 模块
- Elixir - 别名
- Elixir - 函数
- Elixir - 递归
- Elixir - 循环
- Elixir - 可枚举对象
- Elixir - 流
- Elixir - 结构体
- Elixir - 协议
- Elixir - 文件I/O
- Elixir - 进程
- Elixir - 符号
- Elixir - 列表推导
- Elixir - 类型规范
- Elixir - 行为
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 库
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用资源
- Elixir - 讨论
Elixir - 流
许多函数都期望一个可枚举对象并返回一个列表。这意味着,在使用 Enum 执行多个操作时,每个操作都会生成一个中间列表,直到我们得到最终结果。
与 Enum 的急切操作相反,流支持惰性操作。简而言之,流是惰性的、可组合的可枚举对象。这意味着流只有在绝对需要时才会执行操作。让我们来看一个例子来理解这一点:
odd? = &(rem(&1, 2) != 0) res = 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum IO.puts(res)
运行上述程序后,将产生以下结果:
7500000000
在上面给出的例子中,1..100_000 |> Stream.map(&(&1 * 3)) 返回一个数据类型,一个实际的流,它表示对范围 1..100_000 的映射计算。它尚未评估此表示。流不会生成中间列表,而是构建一系列计算,只有当我们将底层流传递给 Enum 模块时才会调用这些计算。在处理大型(可能无限)集合时,流非常有用。
流和枚举具有许多共同的函数。流主要提供与 Enum 模块提供的函数相同的函数,这些函数在对输入可枚举对象执行计算后,会生成列表作为返回值。其中一些列在下面的表格中:
序号 | 函数及其描述 |
---|---|
1 |
chunk(enum, n, step, leftover \\ nil) 将可枚举对象分成块进行流式处理,每个块包含 n 个项目,每个新块从可枚举对象的 step 个元素开始。 |
2 |
concat(enumerables) 创建一个流,该流枚举可枚举对象中的每个可枚举对象。 |
3 |
each(enum, fun) 对每个项目执行给定的函数。 |
4 |
filter(enum, fun) 创建一个流,根据枚举上给定的函数过滤元素。 |
5 |
map(enum, fun) 创建一个流,它将在枚举上应用给定的函数。 |
6 |
drop(enum, n) 惰性地从可枚举对象中删除接下来的 n 个项目。 |
广告