2016-04-18 5 views
7

Ich habe eine Karte mit Schlüssel-Wert-Paaren und ein Tupel mit Atomen. Ich mag einen Eintrag aus der Karte entfernen, wo der Schlüssel nicht ein Atom in dem Tuple istElixir: Wie man eine Karte mit Schlüsseln filtert

m = %{value1: nil, value2: nil, value4: nil} 
t = {:value1, :value3, :value4} 
# The result should be %{value1: nil, value4: nil} 

Es ist eine Art eines Schnitt Problem. Ich schaute in Enum.filter und MapSet, fand aber keine elegante Lösung. Dies muss ein häufiges Problem sein und Ihre Eingabe wird sehr geschätzt.

+4

Ich denke, der Schlüssel weißen Liste eine Liste an erster Stelle sein sollte, kein Tupel. –

Antwort

12

Verwenden Map.take/2 und ein Tuple.to_list/1:

iex(1)> m = %{value1: nil, value2: nil, value4: nil} 
%{value1: nil, value2: nil, value4: nil} 
iex(2)> t = {:value1, :value3, :value4} 
{:value1, :value3, :value4} 
iex(3)> Map.take(m, Tuple.to_list(t)) 
%{value1: nil, value4: nil} 
Verwandte Themen