List 如何在列表中搜索特定元素

List 如何在列表中搜索特定元素,list,erlang,List,Erlang,我想检索列表中第一个出现的“Apple”的id(在本例中为1)。例如: List = [["1","Apple"],["2","Orange"],["3","Apple"]]. 一个简单的递归函数可能就是您在这里寻找的 find_key([], _) -> error; find_key([[Key, Value] | Rest], Search) when Value = Search -> Key; find_key([_ | Rest], Search) -> find

我想检索列表中第一个出现的
“Apple”
的id(在本例中为1)。例如:

List = [["1","Apple"],["2","Orange"],["3","Apple"]].

一个简单的递归函数可能就是您在这里寻找的

find_key([], _) -> error;
find_key([[Key, Value] | Rest], Search) when Value = Search -> Key;
find_key([_ | Rest], Search) -> find_key(Rest, Search). 

一个简单的递归函数可能就是您在这里寻找的

find_key([], _) -> error;
find_key([[Key, Value] | Rest], Search) when Value = Search -> Key;
find_key([_ | Rest], Search) -> find_key(Rest, Search). 

在Erlang世界中,对于固定大小的数据类型,我们使用
tuple
s。您的列表可能会变大,但我认为它的元素是固定大小的,所以我建议对它的元素使用tuple,您可以使用模块的API函数和:


在Erlang世界中,对于固定大小的数据类型,我们使用
tuple
s。您的列表可能会变大,但我认为它的元素是固定大小的,所以我建议对它的元素使用tuple,您可以使用模块的API函数和:

您可以使用:

List = [["1","Apple"],["2","Orange"],["3","Apple"]],
{value, [Id, "Apple"]} =
  lists:search(fun([Id, Name]) -> Name == "Apple" end, List),
Id.
您可以使用:

List = [["1","Apple"],["2","Orange"],["3","Apple"]],
{value, [Id, "Apple"]} =
  lists:search(fun([Id, Name]) -> Name == "Apple" end, List),
Id.

您的列表格式是预定义的吗?如果没有,您可能希望为单个项使用元组,为id使用整数,例如,[{1,“Apple”},{2,“Orange”},{3,“Apple”},…],这将允许您使用PropList()函数。列表的格式是预定义的吗?如果没有,您可能想看看对单个项使用元组,对id使用整数,例如,[{1,“Apple”},{2,“Orange”},{3,“Apple”},…],这将允许您使用proplists()函数。我认为在C实现的BIF
lists:keyfind/2
会更好。@Hynek Pichi Vychodil对于实际系统,我同意。我不知道他们写这篇文章是为了锻炼自己,还是为了现实生活。我在回答时考虑了这个练习。我认为在C实现的BIF
列表中:keyfind/2
会更好。@Hynek Pichi Vychodil对于实际系统,我同意。我不知道他们写这篇文章是为了锻炼自己,还是为了现实生活。我回答时考虑到了这个练习。