2017-06-22 53 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