orddict 练习

一个比较好的参照 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,[]) (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)
原文地址:https://www.cnblogs.com/ShankYan/p/4152291.html