这看起来很简单,但我似乎无法在文档中找到它。如果项目存在于列表或元组中,我只需返回true
或false
。 Enum.find/3
真的是最好的方法吗?
Enum.find(["foo", "bar"], &(&1 == "foo")) != nil
答案 0 :(得分:91)
您可以使用Enum.member?/2
Enum.member?(["foo", "bar"], "foo")
# true
使用元组,您需要先使用Tuple.to_list/1
Tuple.to_list({"foo", "bar"})
# ["foo", "bar"]
答案 1 :(得分:30)
根据此处和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"
如果你想检查一个元组,你需要转换为list(credit @Gazler):
Tuple.to_list({"foo", "bar"})
# ["foo", "bar"]
但正如@CaptChrisD在评论中指出的那样,这是一个不常见的元组需求,因为人们通常会关注元组中项目在模式匹配中的确切位置。
答案 2 :(得分:23)
或者只使用in
:
iex(1)> "foo" in ["foo", "bar"]
true
iex(2)> "foo" in Tuple.to_list({"foo", "bar"})
true
答案 3 :(得分:2)
我昨天开始在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]))
答案 4 :(得分:1)
您也可以使用Enum.find_value/3
:
{{1}}