gpt4 book ai didi

elixir - 如何将键值对放入具有可变键名的映射中

转载 作者:行者123 更新时间:2023-12-04 13:08:11 24 4
gpt4 key购买 nike

我试图最终得到一张包含许多不同偏好的 map ,它应该是这样的:

%{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。

最佳答案

您的代码几乎是正确的,您刚刚在 reduce 函数中交换了参数顺序:

Enum.reduce(preferences, fn(data, acc)->
Map.put(acc, data.preference, %{foo: data.foo})
end)

关于elixir - 如何将键值对放入具有可变键名的映射中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com