Dict 是一个Key-Value字典,与orddict类似,只是比orddict存储的数据要大,具体的接口就不再细说,自己看官方文档,都比较简单,或者看:http://www.techrepublic.com/article/working-with-dictionaries-in-erlang/
这里面有两个存储接口,append和store,有同事问我这两个有什么不同,我能想到的是
1 存储格式不一样,如果存的是列表,
?1> D = dict:new().
{dict,0,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}}
6> D3 = dict:append(1, [a,b], D).
{dict,1,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],[],[],[],[],[],[],[],[],[],
[[1,[a,b]]],
[],[],[],[]}}}
7> D4 = dict:store(1, [a,b], D).
{dict,1,16,16,8,80,48,
{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
{{[],[],[],[],[],[],[],[],[],[],[],[[1,a,b]],[],[],[],[]}}}
一个是[[1,[a,b]]], 一个是[[1,a,b]],这个其实没什么,主要是filter的时候要注意格式配置
2 append是追加,如果你要替换原来的Key, 要先erase(Key, D), 再 dict:append(Key, Value)
store就不用,它自己会自动替换原来的Key,这里省了erase(Key,D), 但具体的效率没有测过哪个更快,对于进程字典的效率本来就比较快,空了可以测一下,或者哪个测过请告知下,谢谢!
另外:在R17后还增加了类似的数据结构map,操作基本类似
M = maps:new(). M1 = maps:put(k1,v1,M). maps:get(k1,M1). maps:find(k1,M1). M2 = maps:remove(k1,M1). get 和 fetch一样,在key不存在的时候,会crash,find会返回error,成功则返回{ok,v1}