【Erlang】十七、映射组 (map) (键值对)

2022-07-29,,,,

映射组(map)

  • 特点
  • 创建映射组
  • 添加键值
  • 修改键的值
  • 映射组相关的内置函数

特点

  • 映射组的语法与记录相似,不同之处是省略了 记录名,并且键-值分隔符是 =>:=
  • 映射组是键值对的关联性集合
  • 映射组的键可以是任何 全绑定的数据类型(数据结构里没有任何绑定的变量)
  • 映射组的各个元素根据键进行排序
  • 不改变键的情况下更新映射组是一种高效的操作
  • 映射组有明确的顺序

创建映射组

> erl
Eshell V8.0
> X = #{ a => 1, b => 2 }.
#{a => 1,b => 2}

添加键值对

> erl
Eshell V8.0
> X = #{ a => 1, b => 2 }.
#{a => 1, b => 2}
> X2 = X#{ c => 3}.
#{a => 1, b => 2, c => 3}

修改键的值

> erl
Eshell V8.0
> X = #{ a => 1, b => 2 }.
#{a => 1, b => 2}

%% 方法1:如果改键不存在,会添加该键值对
> X2 = X#{ c => 5}.
#{a => 1, b => 2, c => 5}

%% 方法2, 如果该键不存在,会抛出异常
> X3 = X#{ c:= 8}.
#{a => 1, b => 2, c => 8}

:= 修改键值时,如果该键不存在,会抛出异常


映射组相关的内置函数

  • maps:new() 返回一个空的映射组 #{}
  • erlang:isMap(M) 返回 M 是否是一个映射组,通常用在关卡或函数主体中
  • maps:to_list(M) 把映射组M里所有键和值转换成一个键值列表。键在生成的列表里严格按照升序排列 [{K1,V1}, ...{Kn,Vn}]
  • maps:form_list([{K1,V1}, ...{Kn,Vn}]) 把一个包含键值对的列表转换成映射组M。如果出现相同的键,将会跳过,使用第一次出现的键值对
  • maps:size(M) 取键值对数量
  • maps:is_key(Key, Map) 判断映射组中是否包含一个键为Key的键值对
  • maps:get(Key, Map) 取键为Key的值,如果该键不存在,抛出异常错误
  • maps:find(Key, Map) 查找键为Key的值,如果存在返回 {ok, Value},否则返回 error
  • maps:keys(Map) 返回Map的所有键的列表,按升序排列
  • maps:remove(Key, Map) 返回一个新的不包含该Key的映射组
  • maps:without([Key1,...,KeyN], Map) 返回一个新的不包含该[Key1,...,KeyN]的映射组
  • maps:difference(M1, M2) 返回新的映射组M3,M3是M1的复制,但是不包含M2中所包含的键

本文地址:https://blog.csdn.net/qq_31099163/article/details/108984046

《【Erlang】十七、映射组 (map) (键值对).doc》

下载本文的Word格式文档,以方便收藏与打印。