我有这样的结构清单..。
[ %Phonebook{name: "Family", id: 3}, %Phonebook{name: "Friend", id: 2},
%Phonebook{name: "Relatives", id: 1} ]我想成为这样的人。
["Family": "3", "Friend": "2", "Relatives": "1"]我怎么才能用药剂做这件事呢?
发布于 2018-08-14 04:18:03
首先,不可能在Keyword中使用字符串键。
在不失去一般性的情况下,我们可以假设你有地图,而不是结构。所以,给您一个Kernel.SpecialForms.for/1理解:
list = [
%{name: "Family", id: 3},
%{name: "Friend", id: 2},
%{name: "Relatives", id: 1}
]
for %{name: name, id: id} <- list, do: {name, id}请注意,你得到的正是你想要的。
#⇒ [{"Family", 3}, {"Friend", 2}, {"Relatives", 1}]如果这些是原子,您将得到一个关键字,它的形式是您所期望的:
for %{name: name, id: id} <- list, do: {String.to_atom(name), id}
#⇒ [Family: 3, Friend: 2, Relatives: 1]无论您想要返回一个map,请在上面的调用中使用into参数:
for %{name: name, id: id} <- list, do: {name, id}, into: %{}
#⇒ %{"Family" => 3, "Friend" => 2, "Relatives" => 1}西德诺特:
[{:Family, 3}, {:Friend, 2}, {:Relatives, 1}] ==
[Family: 3, Friend: 2, Relatives: 1]
#⇒ true同样,使用Enum方法可以实现相同的功能,比如Enum.map/2。
Enum.map(list, fn item -> {item.name, item.id} end)或者是它的简短形式:
Enum.map(list, & {&1.name, &1.id})https://stackoverflow.com/questions/51833506
复制相似问题