Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何检查长生不老药列表或元组中是否存在项?_Elixir - Fatal编程技术网

Elixir 如何检查长生不老药列表或元组中是否存在项?

Elixir 如何检查长生不老药列表或元组中是否存在项?,elixir,Elixir,这看起来很简单,但我似乎在文档中找不到它。如果列表或元组中存在项,我只需返回true或false。Enum.find/3真的是最好的方法吗 Enum.find(["foo", "bar"], &(&1 == "foo")) != nil 你可以用 对于元组,首先要使用 根据这里的答案和Elixir Slack中的答案,有多种方法可以检查列表中是否存在项目。 根据@Gazler的回答: Enum.member?(["foo", "bar"], "foo") # true 或者干

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

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

对于元组,首先要使用


根据这里的答案和Elixir Slack中的答案,有多种方法可以检查列表中是否存在项目。 根据@Gazler的回答:

Enum.member?(["foo", "bar"], "foo")
# true
或者干脆

"foo" in ["foo", "bar"]
# true

或者如果您希望查找并返回项目而不是
true
false

Enum.find(["foo", "bar"], &(&1 == "foo")
# "foo"
如果要检查元组,需要转换为列表(credit@Gazler):


但正如@CaptChrisD在评论中指出的那样,这是一个不常见的元组需求,因为人们通常关心模式匹配中项目在元组中的确切位置。

或者只使用
中的

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.member?/2是一个不错的选择。但是对于一个元组,你通常关心值的位置,这是元组的优点之一。。。如果你不关心位置,你可能想考虑元组的用法,如果正确的话,你可能想把@瞪羚的答案标记为被接受的答案。y中的
x
保护非常有效,因为它在编译时创建了不同的函数定义。在运行时,它的性能较低,相当于
Enum.member?
,尽管它们可以用于小n。对于大n和紧循环,您将从散列中获得更好的性能,例如
MapSet.member?
。但在大多数情况下,
y中的x
Enum.member?
都可以!谢谢加兹勒。你的答案是正确的,但我想根据我在社区收到的所有建议发布一个单独的答案。请注意,你将无法在警卫内部使用
Enum.member?/2
。在这种情况下,您必须依赖于
中的
。例如:
def foo(string)当字符串位于[“一”、“二”]时,do:IO.put(string)
。顺便说一句,这很有趣,因为
中的
是一个宏,可以转换为
Enum.member?/2
:d这个答案就像是唯一回答OP问题的答案:“…存在于长生不老药列表中”…而不是枚举。
Tuple.to_list({"foo", "bar"})
# ["foo", "bar"]
iex(1)> "foo" in ["foo", "bar"]
true
iex(2)> "foo" in Tuple.to_list({"foo", "bar"})
true
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
map_existence = Enum.reduce(list,%{}, &(Map.put(&2,&1,true)))
map_existence[item_to_check]
Enum.filter(some_other_list,&(map_existence[&1]))