Erlang中的映射组Map详细介绍
主要是遇到 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 转回到映射组的。
上一篇: 入门设计模式之责任链模式