如何在 Erlang 中搜索列表中的项目?
我正在编写一个缓存生成服务器供公司使用。 我想知道如何从列表中搜索项目,因为我想要比较 erlang 中的各种数据结构(如 dict、orddict、列表、元组、树、队列等)的搜索成本以用于缓存程序。
示例:
List = [{"A1",["ankit","sush", "Hover", "x4", "a3","nilesh","mike","erlang" | ...]}|...].
现在,我想搜索键 A1 并在列表中搜索“mike”。 搜索上述列表的最佳方式是什么。
请提供一些例子。 至少是伪的。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
只是为了简化 https://stackoverflow.com/a/15587565/56250 上的示例:
列出: member
使用空列表。 快速查看源代码(https://github .com/erlang/otp/blob/07b8f441ca711f9812fad9e9115bab3c3aa92f79/erts/emulator/beam/erl_bif_lists.c#L184)表明它延迟执行。Just to simplify on the example at https://stackoverflow.com/a/15587565/56250:
lists:member
works with empty lists. Quick look at the source (https://github.com/erlang/otp/blob/07b8f441ca711f9812fad9e9115bab3c3aa92f79/erts/emulator/beam/erl_bif_lists.c#L184) suggests it executes lazily.感谢您的回答。
我编写了一个 Erlang 代码来查找插入和插入的时间。 将日期提取到各种数据结构中,例如数据结构的 LIST、DICT、QUEUE、SET 和 PARALLEL MAP。 仅列表的插入& 获取已完成,但其余部分有并行映射插入。 我想分享代码和 代码的结果。 以下是模块 test.erl
以下是结果:
对于并行地图 DS
对于所有 DS
希望此信息可以帮助您确定哪个是用于不同目的的最佳 DS。 当我完成整个代码时我会更新它。
Thanks for the Answers.
I have written a Erlang code to find the timings for Inserting & Fetching Date into various data Structures like LIST, DICT, QUEUE, SET and PARALLEL MAP of the data structures. Only list's insert & fetch is completed but rest has parallel map insert. I would like to share the code & results of the code. Following is the module test.erl
Following are the results:
For parallel Map DS
For All DS
Hope this information helps you to determine which is the best DS for using for different purpose. I'll update it when I am finished with whole code.
如果您想搜索列表,请使用 列表模块 中的函数Erlang 附带的大量文档的一部分。
如果您想知道要使用的最佳数据结构 - 这是一个略有不同的问题,需要更多信息。
If you want to search a list use the functions in the list module which is part of the extensive documentation that comes with Erlang.
If you want to know the best data structures to use - that's a slightly different question which will require a bit more information.
使用
lists
模块中的keyfind
函数。 例如:Use
keyfind
function fromlists
module. For example:如果您想要这种“列表”,您可以轻松地手工制作自己的搜索:
但我不确定您到底想要什么。 例如,如果您想在列表中搜索键“A1”而不是值“mike”,则这将是不同的解决方案。 如果您想知道如何以最佳结构存储这种类型,这只是另一个问题。 您应该提供更多信息。
If you want this kind of "List" you can easily hand craft your own search:
But I'm not sure what exactly you want. For example if you want search for key "A1" and than for value "mike" in the list, it will be different solution. And if you want know how store this sort in best structure it is just another one question. You should provide more information.
如果您的列表是一个简单的基于术语的项目列表,那么最简单的解决方案是:
假设您使用 == 运算符检查列表中项目的相等性,则上述方法将起作用。 您可以根据需要修改该运算符以适应其他类型的比较/相等。
If your list is a simple one Term based item list, then the simplest solution is:
The above will work assuming that how you check the equality of your items in the list is with the == operator. You can modify that operator for accomodating other types of comparison/equality as you need.
您还可以使用 http://erlang 中的
any
.org/doc/man/lists.html#any-2如果找到则返回
true
,否则返回false
。You can also use
any
from http://erlang.org/doc/man/lists.html#any-2will return
true
if found orfalse
otherwise.不可能比这更简单了:
Couldn't be simpler than this: