zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/ShankYan/p/4152291.html
Copyright © 2011-2022 走看看