erlang:区分支持者与支持者列表

时间:2015-09-15 16:12:21

标签: list erlang key

我写了一个函数,它获得了proplistslist的proplists和key。 如果输入是proplists,我只需使用proplists:get_value来查找与key对应的值。但如果输入是支持者列表,我需要迭代其所有元素。并在每个人中寻找钥匙。 我不确定如何区分listsproplistslists:is_list为这两个人返回true ...

1 个答案:

答案 0 :(得分:5)

proplist具有元组或原子的元素。如果您的案例的列表参数的第一个元素是其中之一,则您有一个proplist,否则您有一个proplists列表。例如,此代码将返回为给定键找到的值或值列表:

get_value(_Key, []) -> undefined;
get_value(Key, [KV|_]=PL) when is_tuple(KV); is_atom(KV) ->
    proplists:get_value(Key, PL);
get_value(Key, List) when is_list(List) ->
    [get_value(Key, V) || V <- List].

以下是一些示例输出:

2> pl:get_value(foo, []).
undefined
3> pl:get_value(foo, [{foo,bar}]).
bar
4> pl:get_value(foo, [[{foo,bar}]]).
[bar]
5> pl:get_value(foo, [[{foo,bar}],[foo],[{foo,baz}]]).
[bar,true,baz]

请注意,在最后一种情况下,第二个参数中的中间proplist只有一个键作为原子,没有关联值,因此返回列表中的值为true