一个比较好的参照 orddict 是
http://dhq.me/erlample/modules/dict/append_3.html?search=dict:&i=0
测试前:
Od7.
[{a,b},{c,[4]},{k,[[v1,v2,v3]]},{m,[s,h,a,n,k]}]
基本成员函数:
new,append/3,append_list/3,erase/2
3> Od = orddict:new(). [] 6> Od1 = orddict:append(a,b,Od). [{a,[b]}] 7> Od2 = orddict:append(a,c ,Od1). [{a,[b,c]}] orddict:erase(a, Od2). []
fetch/2
orddict:fetch(a, Od7). b 50> orddict:fetch(g, Od7). ** exception error: no function clause matching orddict:fetch(g,[{k,[[v1,v2,v3]]},{m,[s,h,a,n,k]}]) (orddict.erl, line 80)
find/2
注:与fetch 的区别,字典里没有相关联的键值存在不会抛异常错误,只返回一个原子 error
orddict:find(g,Od7).
error
48> orddict:find(a, Od7).
{ok,b}
fetch_keys/1
注:以列表的形式返回字典里所有的键
Od4.
[{a,b},{k,[[v1,v2,v3]]}]
orddict:fetch_keys(Od4).
[a,k]
from_list/1
orddict:from_list([{a,b}]). [{a,b}] orddict:from_list([{a, [c,c,c]}]). [{a,[c,c,c]}]
is_empty/1
orddict:is_empty(Od5). false
is_key/2
orddict:is_key(a, Od5). true
size/1
orddict:size(Od7). 4
store/3
注:以键值(Key - Value)对的形式存储在字典里。如果字典里已经存在 Key 的键,则把跟 Key 相关的值替换为 Valu
17> Od4.
[{a,b},{k,[[v1,v2,v3]]}]
18> orddict:store(a, cc, Od4).
[{a,cc},{k,[[v1,v2,v3]]}]
to_list/1
>Od7. [{a,b},{c,[4]},{k,[[v1,v2,v3]]},{m,[s,h,a,n,k]}] >orddict:to_list(Od7). [{a,b},{c,[4]},{k,[[v1,v2,v3]]},{m,[s,h,a,n,k]}]
update_counter/3
注:如果指定键在字典里不存在,则在字典里插入(store)一个 {Key, Increment} 的键值对
31> orddict:update_counter(a,3, [{a, 10},{b,10}]).
[{a,13},{b,10}]
32> orddict:update_counter(c,3, [{a,4}]).
[{a,4},{c,3}]
带有函数参数的成员函数
filter/2
orddict:filter(fun(K, V) -> not is_list(V) end, Od5 ). [{a,b}] 22> Od5. [{a,b},{k,[[v1,v2,v3]]},{m,[s,h,a,n,k]}]
fold/3
Od6 = orddict:erase(a, Od5). [{k,[[v1,v2,v3]]},{m,[s,h,a,n,k]}] 25> LenSun = orddict:fold(fun(K, V, Sum) -> length(V)+ Sum end,0, Od6 ). 6
map/2
注:对字典里的每一对键值遍历调用函数(Fun),最终返回一个新的字典
Od8 = orddict:from_list([{k1, 1}, {k2, 2}, {k3,3}]).
[{k1,1},{k2,2},{k3,3}]
56> orddict:map(fun(_K, V) -> V * V end, Od8).
[{k1,1},{k2,4},{k3,9}]
merge/3
注:把 2 个字典合并成为一个新的字典,原来字典的键值都会保留下来,如果存在相同的键,则调用合并函数(Fun)处理并返回一个新值。例如下面存在有键相同时,则把值相加:
Od9 = orddict:from_list([{k1,1}, {k2,2}]).
[{k1,1},{k2,2}]
58> Od10 = orddict:from_list([{k1, 10}]).
[{k1,10}]
60> orddict:merge(fun(_K, V1, V2) -> V1 + V2 end, Od9, Od10).
[{k1,11},{k2,2}]
update/3
注:如果指定的键在字典里不存在的话,则报错
orddict:update(k1, fun(V) ->V + 100 end, [{k1, 1}]).
[{k1,101}]
40> orddict:update(k2, fun(V) ->V + 100 end, [{k1, 1}]).
** exception error: no function clause matching
orddict:update(k2,#Fun<erl_eval.6.106461118>,[]) (orddict.erl, line 161)
in function orddict:update/3 (orddict.erl, line 162)
update/4
注:如果指定的键在字典里不存在的话,不会报异常错误,用给出的默认值替换
33> orddict:update(k3, fun(V) -> V+10 end, 100, [{k2,3}]).
[{k2,3},{k3,100}]
34> Od7.
[{a,b},{c,[4]},{k,[[v1,v2,v3]]},{m,[s,h,a,n,k]}]
35> orddict:update(c, 10, Od7).
** exception error: bad function 10
in function orddict:update/3 (orddict.erl, line 164)
in call from orddict:update/3 (orddict.erl, line 162)