這看起來很簡單,但我似乎無法在文檔中找到它。如果項目存在於列表或元組中,我只需簡單地返回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的答案是正確的答案。 –