这看起来很简单,但我似乎无法在文档中找到它。如果项目存在于列表或元组中,我只需简单地返回true
或false
。 Enum.find/3
真的是最好的方法吗?如何检查一个项目是否存在于Elixir列表或元组中?
Enum.find(["foo", "bar"], &(&1 == "foo")) != nil
这看起来很简单,但我似乎无法在文档中找到它。如果项目存在于列表或元组中,我只需简单地返回true
或false
。 Enum.find/3
真的是最好的方法吗?如何检查一个项目是否存在于Elixir列表或元组中?
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"]
谢谢Gazler。您的回答是正确的,但我想根据我在社区中收到的所有建议发布一个单独的答案。 – ewH
请注意,您将无法在警卫内使用'Enum.member?/ 2'。在那种情况下,你将不得不依靠'in'。例如:'当在[“one”,“two”]中的字符串时,def foo(string),做:IO.puts(string)'。顺便说一下,这很有趣,因为'in'是一个转换为'Enum.member?/ 2'的宏:D – Alessandro
基于这里的答案,并在药剂懈怠,有多种方法可以检查项目是否存在于列表中。 每答案由@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"
项目
如果你想检查一个元组,你需要转换为列表(信用@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
您可以使用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
我在药剂昨天开始编程,但我会尝试一些我做了很多的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.member/2会?做个好人。 但是对于一个元组,你通常关心值的位置,这是元组的美丽之一......如果你不关心位置,可能需要考虑元组的使用 – CaptChrisD
你可能想标记@ Gazler的答案是正确的答案。 –