I am writing a cache gen-server for the company Use. I am wondering how to search an item from the list as I want the cost of the search for comparing various data structures in erlang like dict, orddict, List, tuples, tree, queue etc to use for cache program.
Example:
List = [{"A1",["ankit","sush", "Hover", "x4", "a3","nilesh","mike","erlang" | ...]}|...].
Now, I want to search for the Key A1 and search for 'mike' in the list. What is the best way to search the above List.
Please provide some examples. Atleast Pseudo for it.
8条答案
按热度按时间7gyucuyw1#
为了简化https://stackoverflow.com/a/15587565/56250处的示例:
lists:member
可以处理空列表,快速查看源代码(https://github.com/erlang/otp/blob/07 b8 f441 ca 711 f9812 fad 9 e9115 bab 3c 3aa 92 f79/Erts/emulator/beam/erl_bif_lists. c#L184),可以看出它执行起来很慢。sd2nnvve2#
谢谢你的回答。我已经写了一个Erlang代码来寻找插入和提取日期到各种数据结构的时间,如LIST,DICT,QUEUE,SET和数据结构的并行Map。只有列表的插入和提取完成,但其余的并行Map插入。我想分享代码和代码的结果。以下是模块测试。erl
**结果如下:**对于并行Map DS
对于所有DS
希望这些信息能帮助你确定哪一个是最好的DS用于不同的目的。我会更新它时,我完成了整个代码。
chhqkbe13#
如果您想搜索列表,请使用list module中的函数,它是Erlang附带的extensive documentation的一部分。
如果你想知道最好的数据结构使用-这是一个稍微不同的问题,将需要更多的信息。
7ivaypg94#
使用
lists
模块中的keyfind
函数。例如:crcmnpdw5#
如果你想要这种“列表”,你可以很容易地手工制作自己的搜索:
但我不确定你到底想要什么。例如,如果你想在列表中搜索键“A1”,而不是值“mike”,这将是不同的解决方案。如果你想知道如何以最佳结构存储这种排序,这只是另一个问题。你应该提供更多的信息。
uujelgoq6#
如果您的列表是一个简单的基于一个字词的项目列表,那么最简单的解决方案是:
上面的操作假设您使用**==**运算符检查列表中的项目是否相等。您可以根据需要修改该运算符以适应其他类型的比较/相等。
gmol16397#
You can also use
any
from http://erlang.org/doc/man/lists.html#any-2如果找到,将传回
true
,否则传回false
。hmmo2u0o8#
再简单不过了: