2016-12-14 66 views
1

我有一个函数返回一个Map,从List(:erlang.memory())转换而来。它按我的预期工作,但它看起来并不漂亮。我怎样才能将片段细化为更加灵活的方式(意味着更美丽的逻辑)?将列表转换为地图,Elixir方式

{{:total, total}, {:processes, processes}, {:processes_used, processes_used}, {:system, system}, {:atom, atom}, {:atom_used, atom_used}, {:binary, binary}, {:code, code}, {:ets, ets}} = 
    :erlang.memory() 
    |> List.to_tuple() 

params = %{ 
    total: total, 
    processes: processes, 
} 

回答

6
iex(1)> :erlang.memory() 
[total: 20258296, processes: 5377080, processes_used: 5370936, system: 14881216, 
atom: 264529, atom_used: 255982, binary: 72440, code: 6322711, ets: 335736] 

iex(2)> :erlang.memory() |> Enum.into(%{}) 
%{atom: 264529, atom_used: 259196, binary: 149136, code: 6564510, ets: 347720, 
    processes: 5518032, processes_used: 5516752, system: 15248920, 
    total: 20766952} 

Enum.into/2就派上用场了。

NB请参考下面@Dogbert的宝贵意见。

+6

对于这个特定的情况,还有'|> Map.new'。 – Dogbert

+0

Enum.into/2和Map.new/1是优雅和Elixir-ish解决方案。谢谢!! – hykw