[elixir] Elixir 목록이나 튜플에 항목이 있는지 확인하는 방법은 무엇입니까?

이것은 겉보기에 간단 해 보이지만 문서에서 찾을 수없는 것 같습니다. 단순히 반환 true하거나 false항목이 목록 또는 튜플에있는 경우 필요합니다 . 이 Enum.find/3작업을 수행하는 가장 좋은 방법입니까?

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



답변

당신이 사용할 수있는 Enum.member?/2

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

튜플을 사용하면 먼저 다음을 사용하여 목록으로 변환하고 싶을 것입니다. Tuple.to_list/1

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


답변

여기와 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가 주석에서 지적했듯이 이것은 일반적으로 패턴 일치를 위해 튜플에서 항목의 정확한 위치에 관심이 있기 때문에 튜플에 대한 드문 필요입니다.


답변

또는 다음을 사용하십시오 in.

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


답변

어제 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]))


답변

다음을 사용할 수도 Enum.find_value/3있습니다.

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


답변