1

如果我有一个键值元组列表,例如 List = [{key1, value1}, {key2, value2}] 最好使用

列表:keyfind(Key, N, TupleList) 例如列表:keyfind(key1, 1, List)

找到一个给定的值或

dict:from_list(列表)

把它变成一个字典,然后用 dict:fetch/2 或 dict:find/2 查找?

使用 dict 对我来说更具可读性,因为它直接返回值,所以我可以内联使用它,但是我想知道哪个更有效?

谢谢。

4

1 回答 1

1

您还可以选择使用 proplists:lookup(),它是 stdlib 的一部分,并且务实地是表达您正在做的事情的最惯用的方式。您将以原始形式操纵结构,您的程序员同行会为此感谢您。从下面的链接中可以看出,就效率而言,遍历列表直到找到匹配项,任何进一步出现的键都将被忽略。

proplists.erl

列表的使用:keyfind() 是另一个不太习惯的选项,因此在我看来,在保持与使用结构作为 proplist 的一致性方面失去了观点。lists:keyfind() 是一个 BIF,它只告诉我们用 C 实现并不一定是因为效率,而是很有可能。

最后,在我看来,使用列表来 dict 并没有让您利用可读性,并且在最初构思数据结构的方式方面您将失去一致性,与其他两个相比可能效率较低,因为您遍历列表把它变成一个字典,然后你用字典接口查找结构,所以在我看来你是在失去而不是得到。

我的两分钱!

于 2012-11-27T15:45:19.437 回答