如何检查项目是否存在于Elixir列表或元组中?

时间:2016-04-05 15:35:24

标签: elixir

这看起来很简单,但我似乎无法在文档中找到它。如果项目存在于列表或元组中,我只需返回truefalseEnum.find/3真的是最好的方法吗?

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

5 个答案:

答案 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

或者如果您想查找并退回该项而不是truefalse

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}}