2017-06-22 55 views
1

Enum.member/2只能檢查一個元素的成員資格。像Elixir Enum成員?對於多個元素

Enum.member ["abc", "def", "ghi", "123", "hello"], "abc" -> true

是否有使用匿名功能等檢查多個項目的會員資格,如果不包括保持乾爽,避免像這樣的一個元素返回false的方法嗎?

Enum.member ["abc", "def", "ghi", "123", "hello"], "abc" 
Enum.member ["abc", "def", "ghi", "123", "hello"], "def" 
Enum.member ["abc", "def", "ghi", "123", "hello"], "ghi" 

回答

2

您可以使用Enum.all?/2組合(如果你希望所有的項目是存在),或者Enum.any?/2(如果你想要的任何一個項目存在)+ Enum.member?/2(或in運營商,這不相同) :

iex(1)> list = ["abc", "def", "ghi", "123", "hello"] 
["abc", "def", "ghi", "123", "hello"] 
iex(2)> Enum.all?(["abc", "def", "ghi"], fn x -> x in list end) 
true 
iex(3)> Enum.any?(["abc", "def", "ghi"], fn x -> x in list end) 
true 
iex(4)> Enum.all?(["abc", "z"], fn x -> x in list end) 
false 
iex(5)> Enum.any?(["abc", "z"], fn x -> x in list end) 
true 
+0

感謝檢查!正是我在找什麼 –

1

另一種選擇是帶套的工作,然後用MapSet.subset?/2

iex(1)> list = ["abc", "def", "ghi", "123", "hello"] 
["abc", "def", "ghi", "123", "hello"] 

iex(2)> MapSet.subset?(MapSet.new(["abc", "def", "ghi"]), MapSet.new(list)) 
true 

iex(3)> MapSet.subset?(MapSet.new(["abc", "def", "jkl"]), MapSet.new(list)) 
false