在长生不老药中如何将%{"foo" => "bar"}转换为%{foo: "bar"}?
发布于 2015-08-13 14:03:23
使用理解
iex(1)> string_key_map = %{"foo" => "bar", "hello" => "world"}
%{"foo" => "bar", "hello" => "world"}
iex(2)> for {key, val} <- string_key_map, into: %{}, do: {String.to_atom(key), val}
%{foo: "bar", hello: "world"}发布于 2017-01-26 01:15:05
我认为最简单的方法是使用Map.new
%{"a" => 1, "b" => 2}
|> Map.new(fn {k, v} -> {String.to_atom(k), v} end)
%{a: 1, b: 2}发布于 2015-08-13 14:03:05
您可以使用减少/3和原子/1的组合
%{"foo" => "bar"}
|> Enum.reduce(%{}, fn {key, val}, acc -> Map.put(acc, String.to_atom(key), val) end)
%{foo: "bar"}然而,您应该小心转换为基于用户输入的原子,因为它们不会被垃圾收集,这会导致内存泄漏。见本期。
如果原子已经存在,可以使用原子/1来防止这种情况发生。
https://stackoverflow.com/questions/31990134
复制相似问题