【问题标题】:Erlang: proplists:get_value/2 or pattern matching?Erlang:proplists:get_value/2 还是模式匹配?
【发布时间】:2016-09-01 05:40:36
【问题描述】:

我有一个始终具有相同形式的元组列表(即元组总是以相同的顺序出现):

1> L = [{a, 1}. {b,2}, {c, 3}, {d, 4}].

知道列表只有几个元素,提取与键关联的值的最佳方法是什么?

假设列表作为参数传递给函数,以提取我应该使用的值:

proplists:get_value(a, L).
proplists:get_value(b, L).
...
proplists:get_valus(d, L).

或者我应该简单地使用模式匹配:

[{a, 1}. {b,2}, {c, 3}, {d, 4}] = L.

【问题讨论】:

    标签: erlang


    【解决方案1】:

    如果你真的知道你的列表格式相同,那么模式匹配是最简单的

    [{a, A}, {b, B}, {c, C}, {d, D}] = L,
    

    你可以和下面的比较一下

    [A, B, C, D] = [ proplists:get_value(X, L) || X <- [a,b,c,d] ],
    

    A = proplists:get_value(a, L),
    B = proplists:get_value(b, L),
    C = proplists:get_value(c, L),
    D = proplists:get_value(d, L),
    

    [A, B, C, D] = [ V || Key <- [a,b,c,d], {K, V} <- L, K =:= Key ],
    

    模式匹配也将是最快的。您也可以使用lists:keyfind/3,它以 Bif 的形式实现,比 proplist:get_value/2 快得多,但对于短名单来说并不重要。

    【讨论】:

      猜你喜欢
      • 2011-06-07
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多