2017-06-22 5 views
1

Enum.member/2は、1つの要素のメンバーシップのみをチェックできます。 Elixir Enumのメンバーですか?複数の要素の場合

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

複数のアイテムのメンバーシップをチェックして、要素の1つはDRY滞在し、このような何かを回避するために含まれていない場合は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" 
(あなたがいずれかの項目が存在することにしたい場合は)あなたは Enum.all?/2の組み合わせ(あなたがしたい場合、すべてのアイテムが存在すること)や Enum.any?/2を使用することができます

答えて

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 
関連する問題