【发布时间】:2015-04-24 01:22:38
【问题描述】:
我试图最终得到一个包含许多不同偏好的地图,它应该如下所示:
%{some_preference_name:%{foo:"bar"},another_preference_name:%{foo:"bar"}}
我有一个来自数据库的偏好映射列表,我需要通过它们并将“偏好”字段设置为键,并将各种值作为值映射。
我尝试使用 Enum.reduce 和 Enum,map 执行此操作,但我无法正确获取列表。
Enum.map(preferences, fn(data)->
Map.put(%{}, data.preference,
%{
foo: data.foo
}
)
end)
返回:
[{some_preference_name:%{foo:"bar"}},{another_preference_name:%{foo:"bar"}}]
然后:
Enum.reduce(preferences, fn(acc, data)->
Map.put(acc, data.preference,
%{
foo: data.foo
}
)
end)
返回:
%{some_preference_name:%{foo:"bar"},preference: "another_preference_name",foo:"bar"}
它得到第一个正确,但不是其余的。我知道从 Erlang R17 开始,我能够添加变量键名的唯一方法是使用 Map.put/3。
【问题讨论】:
-
请从数据库中提供您的偏好地图列表。
标签: elixir