- 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 - 关键词列表
到目前为止,我们还没有讨论任何关联数据结构,即可以将某个值(或多个值)与键关联的数据结构。不同的语言使用不同的名称来称呼这些特性,例如字典、哈希表、关联数组等。
在 Elixir 中,我们有两个主要的关联数据结构:关键词列表和映射。在本章中,我们将重点介绍关键词列表。
在许多函数式编程语言中,通常使用由 2 个项目组成的元组列表来表示关联数据结构。在 Elixir 中,当我们有一个元组列表并且元组的第一个项目(即键)是一个原子时,我们称之为关键词列表。请考虑以下示例以了解这一点:
list = [{:a, 1}, {:b, 2}]
Elixir 支持定义此类列表的特殊语法。我们可以将冒号放在每个原子的末尾,并完全去除元组。例如:
list_1 = [{:a, 1}, {:b, 2}] list_2 = [a: 1, b: 2] IO.puts(list_1 == list_2)
上面的程序将生成以下结果:
true
这两个都表示一个关键词列表。由于关键词列表也是列表,因此我们可以对它们使用我们在列表上使用过的所有操作。
要检索与关键词列表中的原子关联的值,请将原子作为 [] 传递到列表名称之后:
list = [a: 1, b: 2] IO.puts(list[:a])
上面的程序生成以下结果:
1
关键词列表具有三个特殊特性:
- 键必须是原子。
- 键是有序的,由开发者指定。
- 键可以多次出现。
为了操作关键词列表,Elixir 提供了 Keyword 模块。但是请记住,关键词列表只是列表,因此它们提供与列表相同的线性性能特征。列表越长,查找键、计数项目数等所需的时间就越长。因此,关键词列表主要在 Elixir 中用作选项。如果您需要存储许多项目或保证一个键最多与一个值关联,则应改用映射。
访问键
要访问与给定键关联的值,我们使用 Keyword.get 函数。它返回与给定键关联的第一个值。要获取所有值,我们使用 Keyword.get_values 函数。例如:
kl = [a: 1, a: 2, b: 3] IO.puts(Keyword.get(kl, :a)) IO.puts(Keyword.get_values(kl))
上面的程序将生成以下结果:
1 [1, 2]
插入键
要添加新值,请使用 Keyword.put_new。如果键已存在,则其值保持不变:
kl = [a: 1, a: 2, b: 3] kl_new = Keyword.put_new(kl, :c, 5) IO.puts(Keyword.get(kl_new, :c))
运行上述程序时,它将生成一个包含附加键 c 的新关键词列表,并生成以下结果:
5
删除键
如果要删除某个键的所有条目,请使用 Keyword.delete;要仅删除某个键的第一个条目,请使用 Keyword.delete_first。
kl = [a: 1, a: 2, b: 3, c: 0] kl = Keyword.delete_first(kl, :b) kl = Keyword.delete(kl, :a) IO.puts(Keyword.get(kl, :a)) IO.puts(Keyword.get(kl, :b)) IO.puts(Keyword.get(kl, :c))
这将删除列表中的第一个 b 和列表中的所有 a。运行上述程序时,它将生成以下结果:
0