Maps
优质
小牛编辑
133浏览
2023-12-01
关键字列表是一种通过键来处理存储在列表中的内容的便捷方式,但在下面,Elixir仍在遍历列表。 如果您对该列表有其他计划需要遍历所有计划,那么这可能是合适的,但如果您计划使用密钥作为数据的唯一方法,则可能是不必要的开销。
这是地图来救你的地方。 每当您需要键值存储时,映射就是Elixir中的“转到”数据结构。
创建地图
使用%{}语法创建地图 -
map = %{:a => 1, 2 => :b}
与关键字列表相比,我们已经看到两个不同之处 -
- 地图允许任何值作为键。
- 地图的密钥不遵循任何订购。
访问密钥
为了访问与键相关联的值,Maps使用与关键字列表相同的语法 -
map = %{:a => 1, 2 => :b}
IO.puts(map[:a])
IO.puts(map[2])
运行上述程序时,会生成以下结果 -
1
b
插入一个键
要在地图中插入一个键,我们使用Dict.put_new函数,该函数将map,new key和new value作为参数 -
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
这将与1匹配。 因此,它将生成输出为1 。
如上所示,只要模式中的键存在于给定的映射中,映射就会匹配。 因此,空地图匹配所有地图。
访问,匹配和添加地图密钥时可以使用变量 -
n = 1
map = %{n => :one}
%{^n => :one} = %{1 => :one, 2 => :two, 3 => :three}
Map模块为Keyword The Map module提供了一个非常类似的API,它具有操作地图的便利功能。 您可以使用Map.get, Map.delete等函数来操作地图。
使用Atom键映射
地图附带一些有趣的属性。 当地图中的所有键都是原子时,您可以使用关键字语法以方便 -
map = %{:a => 1, 2 => :b}
IO.puts(map.a)
地图的另一个有趣的特性是它们提供了自己的语法来更新和访问原子键 -
map = %{:a => 1, 2 => :b}
IO.puts(map.a)
上述程序产生以下结果 -
1
请注意,要以这种方式访问原子键,它应该存在或程序将无法工作。