- 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 - Behave
- Elixir - 错误处理
- Elixir - 宏
- Elixir - 图书馆
- Elixir 有用资源
- Elixir - 快速指南
- Elixir - 有用的资源
- Elixir - 讨论
Elixir - 流
许多函数需要一个可枚举的值并返回一个列表。这意味着,在使用 Enum 执行多个操作时,每个操作都会生成一个中间列表,直到得到结果。
流支持惰性操作,而不是枚举的急切操作。简而言之,流是惰性的、可组合的枚举。这意味着除非绝对需要,否则 Stream 不会执行操作。让我们考虑一个例子来理解这一点 -
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 模块时才会调用这些计算。在处理大型(可能是无限的)集合时,流非常有用。
流和枚举有许多共同的功能。Streams 主要提供与 Enum 模块相同的功能,该模块在对输入枚举执行计算后生成列表作为其返回值。其中一些列在下表中 -
先生。 | 功能及其说明 |
---|---|
1 |
块(枚举,n,步骤,剩余\\ nil) 以块的形式流式传输可枚举项,每个块包含 n 个项目,其中每个新块开始将元素步进到可枚举项中。 |
2 |
连接(可枚举) 创建一个枚举可枚举中每个可枚举的流。 |
3 |
每个(枚举,有趣) 为每个项目执行给定的函数。 |
4 |
过滤器(枚举,有趣) 创建一个流,根据给定的枚举函数过滤元素。 |
5 |
地图(枚举,有趣) 创建一个流,该流将在枚举上应用给定的函数。 |
6 |
下降(枚举,n) 惰性地从可枚举中删除接下来的 n 个项目。 |