我有一个始终具有相同形式的元组列表(即元组总是以相同的顺序排列):
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.
答案 0 :(得分:7)
如果你真的知道你的列表是相同的,那么模式匹配是最简单的
[{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
快,但对于短列表无关紧要。