2017-06-22 5 views
1

Enum.member/2 ist nur in der Lage, für eine Elemente Mitgliedschaft zu überprüfen. WieElixir Enum Mitglied? für mehrere Elemente

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

Gibt es eine Möglichkeit, eine anonyme Funktion zu nutzen, usw. für die Mitgliedschaft in mehrere Elemente überprüft, und die Rückkehr falsch, wenn eines der Elemente ist nicht trocken zu bleiben enthalten und so etwas wie dies zu vermeiden?

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

Antwort

2

Sie eine Kombination aus Enum.all?/2 verwenden können (wenn Sie alle Einzelteile wünschen, vorhanden sein) oder Enum.any?/2 (wenn Sie ein Element vorhanden sein wollen) + Enum.member?/2 (oder der in Operator, der das gleiche tut) :

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

Dank! Genau das, was ich gesucht habe –

1

Eine andere Möglichkeit wäre, mit Sätzen zu arbeiten, dann mit MapSet.subset?/2 überprüfen

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 
Verwandte Themen