2016-12-14 69 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