首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串中的映射键转换为原子

如何将字符串中的映射键转换为原子
EN

Stack Overflow用户
提问于 2015-08-13 13:49:59
回答 16查看 56.8K关注 0票数 91

在长生不老药中如何将%{"foo" => "bar"}转换为%{foo: "bar"}

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2015-08-13 14:03:23

使用理解

代码语言:javascript
复制
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"}
票数 105
EN

Stack Overflow用户

发布于 2017-01-26 01:15:05

我认为最简单的方法是使用Map.new

代码语言:javascript
复制
%{"a" => 1, "b" => 2}
|> Map.new(fn {k, v} -> {String.to_atom(k), v} end)

%{a: 1, b: 2}
票数 66
EN

Stack Overflow用户

发布于 2015-08-13 14:03:05

您可以使用减少/3原子/1的组合

代码语言:javascript
复制
%{"foo" => "bar"}
|> Enum.reduce(%{}, fn {key, val}, acc -> Map.put(acc, String.to_atom(key), val) end)

%{foo: "bar"}

然而,您应该小心转换为基于用户输入的原子,因为它们不会被垃圾收集,这会导致内存泄漏。见本期

如果原子已经存在,可以使用原子/1来防止这种情况发生。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31990134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档