- 教程
- 概述
- 环境
- Basic 语法
- 数据类型
- 变量
- 运算符
- 模式匹配( Pattern Matching)
- 决策( Decision Making)
- Strings( Strings)
- Char Lists( Char Lists)
- 列表和元组( Lists and Tuples)
- 关键字列表( Keyword Lists)
- Maps
- 模块( Modules)
- 别名( Aliases)
- 功能( Functions)
- 递归
- 循环
- Enumerables( Enumerables)
- Streams( Streams)
- Structs( Structs)
- 协议 Protocols
- File I/O
- 进程( Processes)
- Sigils( Sigils)
- 理解( Comprehensions)
- Typespecs( Typespecs)
- 行为( Behaviours)
- 错误处理( Errors Handling)
- Macros( Macros)
- (库)Libraries
- 有用的资源
- 讨论
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- Show 例子
- if statement
- if..else statement
- unless statement
- unless..else statement
- cond
- case
关键字列表( Keyword Lists)
到目前为止,我们还没有讨论任何关联数据结构,即可以将特定值(或多个值)与密钥相关联的数据结构。 不同的语言使用不同的名称来调用这些功能,如字典,散列,关联数组等。
在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
关键字列表有三个特点 -
- Keys must be atoms.
- 根据开发人员的指定订购密钥。
- 钥匙可以多次出现。
为了操纵关键字列表,Elixir提供了关键字模块 。 但请记住,关键字列表只是列表,因此它们提供与列表相同的线性性能特征。 列表越长,查找密钥,计算项目数量等所需的时间越长,等等。 因此,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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论