- 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 - 地图
关键字列表是按键寻址列表中存储的内容的便捷方法,但在底层,Elixir 仍在遍历列表。如果您对该列表有其他计划需要遍历所有内容,那么这可能是合适的,但如果您计划使用键作为访问数据的唯一方法,那么这可能是不必要的开销。
这就是地图可以帮助您的地方。每当您需要键值存储时,映射就是 Elixir 中的“首选”数据结构。
创建地图
使用 %{} 语法创建地图 -
map = %{:a => 1, 2 => :b}
与关键字列表相比,我们已经可以看到两个差异 -
- 映射允许任何值作为键。
- 地图的键不遵循任何顺序。
访问密钥
为了访问与键关联的值,映射使用与关键字列表相同的语法 -
map = %{:a => 1, 2 => :b} IO.puts(map[:a]) IO.puts(map[2])
当上面的程序运行时,它会生成以下结果 -
1 b
插入钥匙
要在映射中插入键,我们使用Dict.put_new函数,它将映射、新键和新值作为参数 -
map = %{:a => 1, 2 => :b} new_map = Dict.put_new(map, :new_val, "value") IO.puts(new_map[:new_val])
这将在新映射中插入键值对:new_val - "value" 。当上面的程序运行时,它会生成以下结果 -
"value"
更新值
要更新地图中已有的值,您可以使用以下语法 -
map = %{:a => 1, 2 => :b} new_map = %{ map | a: 25} IO.puts(new_map[:a])
当上面的程序运行时,它会生成以下结果 -
25
模式匹配
与关键字列表相比,地图对于模式匹配非常有用。当在模式中使用映射时,它将始终匹配给定值的子集 -
%{:a => a} = %{:a => 1, 2 => :b} IO.puts(a)
上述程序生成以下结果 -
1
这会将a与1匹配。因此,它将生成输出1。
如上所示,只要模式中的键存在于给定映射中,映射就会匹配。因此,空地图可以匹配所有地图。
访问、匹配和添加映射键时可以使用变量 -
n = 1 map = %{n => :one} %{^n => :one} = %{1 => :one, 2 => :two, 3 => :three}
Map 模块提供了与 Keyword 模块非常相似的 API,具有操作地图的便捷功能。您可以使用Map.get、Map.delete等函数来操作地图。
带有 Atom 键的地图
地图具有一些有趣的属性。当映射中的所有键都是Atomics时,为了方便起见,您可以使用关键字语法 -
map = %{:a => 1, 2 => :b} IO.puts(map.a)
映射的另一个有趣的属性是它们提供自己的语法来更新和访问Atomics键 -
map = %{:a => 1, 2 => :b} IO.puts(map.a)
上述程序生成以下结果 -
1
请注意,要以这种方式访问Atomics键,它应该存在,否则程序将无法工作。