2014-10-28 13 views

risposta

19

Si potrebbe tubo Enum.into(%{}) oppure utilizzare una comprensione for, ad esempio:

iex> for {k, v} <- %{a: 1, b: 2}, into: %{}, do: {k, v + 1} 
%{a: 2, b: 3} 
0

Ecco un'idea:

def update_map map, [head|tail], func do 
    update_map(
     Dict.update(map, head, :unknown, func), 
     tail, 
     func 
    ) 
end 


def update_map map, [], _ do 
    map 
end 

Poi chiamarlo:

iex(1)> d = %{:a => 1, :b => 2, :c => 3} 
%{a: 1, b: 2, c: 3} 
iex(2)> update_map(d, Dict.keys(d), fn v -> v + 1 end) 
%{a: 2, b: 3, c: 4} 
Problemi correlati