이것은 겉보기에 간단 해 보이지만 문서에서 찾을 수없는 것 같습니다. 단순히 반환 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