2016-04-18 10 views
7

Ho una mappa con coppie chiave-valore e una tupla con atomi. Voglio eliminare ogni voce dalla mappa in cui la chiave non è un atomo nella tuplaElixir: come filtrare una mappa con le chiavi

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

Si tratta di una specie di problema si intersecano. Ho esaminato Enum.filter e MapSet ma non ho trovato una soluzione elegante. Questo deve essere un problema comune e il tuo contributo è molto apprezzato.

+4

Penso che la whitelist chiave dovrebbe essere un elenco, in primo luogo, non è una tupla. –

risposta

12

Usa Map.take/2 e un 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} 
Problemi correlati