• 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)
    
  • 相关阅读:
    SimpleRetryTemplateSupplier
    Atcoder Grand Contest 013 E Placing Squares(组合意义转化+矩阵快速幂/代数推导,思维题)
    Atcoder Grand Contest 033 D Complexity(dp)
    Vue案例之计数器
    Redis数据类型之List列表类型
    Redis数据类型之Hash哈希类型
    Vue之vfor列表展示
    Vue初体验
    RedisDesktopManager本地连接云服务器上的Redis
    Redis数据类型之ZSet有序集合类型
  • 原文地址:https://www.cnblogs.com/ShankYan/p/4152291.html
Copyright © 2020-2023  润新知