Как искать определенный элемент в списке - PullRequest
0 голосов
/ 02 июля 2018

Я хочу получить идентификатор (в данном случае это 1) для первого появления "Apple" в списке. Например:

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

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

В мире Erlang для типов данных фиксированного размера мы используем tuple s. Ваш список может расти, но я думаю, что его элементы имеют фиксированный размер, поэтому я рекомендую использовать кортеж для его элементов, и вы можете использовать функции API модулей списки и proplists :

1> List = [{"1", "Apple"}, {"2", "Orange"}, {"3", "Apple"}].
[{"1","Apple"},{"2","Orange"},{"3","Apple"}]
%% Search in List for a tuple which its 2nd element is "Apple":
2> lists:keyfind("Apple", 2, List).
{"1","Apple"}
3> lists:keyfind("Unknown", 2, List).
false
%% Take first Tuple which its 2nd element is "Apple", Also yield Rest of List:
4> lists:keytake("Apple", 2, List).
{value,{"1","Apple"},[{"2","Orange"},{"3","Apple"}]}
%% Replace a tuple which its 1st element is "3" with {"3", "Banana"}
5> lists:keyreplace("3", 1, List, {"3", "Banana"}).
[{"1","Apple"},{"2","Orange"},{"3","Banana"}]
0 голосов
/ 03 июля 2018

Вы можете использовать lists:search/2 для этого:

List = [["1","Apple"],["2","Orange"],["3","Apple"]],
{value, [Id, "Apple"]} =
  lists:search(fun([Id, Name]) -> Name == "Apple" end, List),
Id.
0 голосов
/ 02 июля 2018

Простая рекурсивная функция, вероятно, то, что вы ищете здесь.

find_key([], _) -> error;
find_key([[Key, Value] | Rest], Search) when Value = Search -> Key;
find_key([_ | Rest], Search) -> find_key(Rest, Search). 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...