欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Erlang中的映射组Map详细介绍

程序员文章站 2022-06-17 08:03:23
主要是遇到 map匹配的问题,所以顺便回忆一下 erlang 中的映射组 map,在其它语言中被称作 hash 哈希或者 dict 字典。 erlang 从 r17 版本...

主要是遇到 map匹配的问题,所以顺便回忆一下 erlang 中的映射组 map,在其它语言中被称作 hash 哈希或者 dict 字典。

erlang 从 r17 版本开始支持映射组

创建映射组

erlang 中的映射组用结构 #{} 表示,创建一个映射组可以这样

更新映射组

映射组可以更新,所谓的更新是创建一个新的映射组,因为 erlang 中的变量是不可改变的。

=> 用于创建或更新一个映射,如果键存在,则更新它,否则就创建一个新的映射。如果一不小心某个键拼写错误,oops.

为了避免这种情况,还有一种更新映射的方法,使用 :=,它只能用来更新映射,而不能创建新的映射,如果键不存在,就会抛出一个 badarg 异常。

两种操作符的区别

1.=> 可以用来更新映射或者创建新的映射
2.:= 只能更新映射,在键不存在时会抛出异常
所以有下面的总结

创建映射组时

只能使用 =>,:= 只能更新映射而无法创建新的映射,而创建映射组时需要创建若干映射

映射组匹配的

左边只能使用 :=,=> 在键不存在时可以创建新的映射,而映射组匹配可以部分匹配 (只匹配左边拥有的部分) ,所以匹配是没有意义的

为了更好的发现错误

只在创建映射组或明确需要创建新的映射时使用 =>,而在其它场合均使用 :=

注意

上面的更新映射,创建新的映射以及匹配可以同时针对多个映射,这里只是作为例子而只选择一对映射。

映射组操作

erlang 中的 maps 模块用于操作映射组

映射组的创建及属性

映射的增加、删除、获取

映射组的归并

映射组与列表之间的转换

映射组的遍历

映射组中映射的选取

返回第一个参数中指定的键的映射组成的映射组

返回键不再第一个参数的列表中的映射组成的映射组

注意

值得一提的是 maps 模块中的若干函数,比如 map, fold, with 和 without 都是使用 maps:to_list/1 转到列表,然后使用 lists 模块的工具处理,然后使用 maps:from_list/1 转回到映射组的。