2014-10-28 47 views

回答

19

,你可以管Enum.into(%{})或使用for理解,即:

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

这里有一个想法:

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 

然后调用它:

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}