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