Подтвердить что ты не робот

Как проверить, существует ли элемент в списке или кортеже Elixir?

Это, казалось бы, просто, но я не могу найти его в документах. Мне нужно просто вернуть true или false, если элемент существует в списке или кортеже. Действительно ли Enum.find/3 лучший способ сделать это?

Enum.find(["foo", "bar"], &(&1 == "foo")) != nil
4b9b3361

Ответ 1

Вы можете использовать Enum.member?/2

Enum.member?(["foo", "bar"], "foo")
# true

С кортежем вы сначала захотите конвертировать в список, используя Tuple.to_list/1

Tuple.to_list({"foo", "bar"})
# ["foo", "bar"]

Ответ 2

Основываясь на ответах здесь и в Elixir Slack, существует несколько способов проверить, существует ли элемент в списке. За ответ от @Gazler:

Enum.member?(["foo", "bar"], "foo")
# true

или просто

"foo" in ["foo", "bar"]
# true

или

Enum.any?(["foo", "bar"], &(&1 == "foo")
# true

или если вы хотите найти и вернуть элемент вместо true или false

Enum.find(["foo", "bar"], &(&1 == "foo")
# "foo"

Если вы хотите проверить кортеж, вам нужно преобразовать его в список (credit @Gazler):

Tuple.to_list({"foo", "bar"})
# ["foo", "bar"]

Но, как указывал @CaptChrisD в комментариях, это необычная потребность в кортеже, потому что обычно обычно интересуется точным положением элемента в кортеже для сопоставления шаблонов.

Ответ 3

Или просто используйте in:

iex(1)> "foo" in ["foo", "bar"]
true
iex(2)> "foo" in Tuple.to_list({"foo", "bar"})
true

Ответ 4

Вы также можете использовать find_value

iex(1)> Enum.find_value(["foo", "bar"],false, fn(x)-> x=="foo" end)
true

iex(2)> Enum.find_value(["foo", "bar"],false, fn(x)-> x=="food" end)
false

Ответ 5

Я начал программировать в Elixir вчера, но я попробую что-то, что я сделал много в JS, может быть, это полезно, когда список содержит много элементов, и вы не хотите проходить его все время, используя Enum.member

map_existence = Enum.reduce(list,%{}, &(Map.put(&2,&1,true)))
map_existence[item_to_check]

Вы также можете получить перекресток с другим списком:

Enum.filter(some_other_list,&(map_existence[&1]))