Elixir 如何将地图和列表与地图合并?(不推荐使用Dict)

Elixir 如何将地图和列表与地图合并?(不推荐使用Dict),elixir,phoenix-framework,Elixir,Phoenix Framework,因此,在我的phoenix应用程序中,我有一个警告: 警告:Dict.merge/2已弃用,请使用映射模块进行工作 使用地图或用于处理关键字列表的关键字模块 测试/支持/测试助手。示例:6 当我将其更改为Map.merge时,它会崩溃,因为attrs不是一个映射,它需要一个映射: 有没有其他方法可以让它工作?还是必须将属性强制转换为映射?您可以使用Enum.into/2合并两个枚举。如果希望关键字列表作为结果,则关键字列表应为第二个参数,如果希望映射作为结果,则映射应为第二个参数。我猜你想要一张

因此,在我的phoenix应用程序中,我有一个警告:

警告:Dict.merge/2已弃用,请使用映射模块进行工作 使用地图或用于处理关键字列表的关键字模块
测试/支持/测试助手。示例:6

当我将其更改为
Map.merge
时,它会崩溃,因为attrs不是一个映射,它需要一个映射:


有没有其他方法可以让它工作?还是必须将属性强制转换为映射?

您可以使用
Enum.into/2
合并两个枚举。如果希望关键字列表作为结果,则关键字列表应为第二个参数,如果希望映射作为结果,则映射应为第二个参数。我猜你想要一张地图,这意味着你可以:

changes = Enum.into(attrs, %{
  name: "Some User",
  username: "user#{Base.encode16(:crypto.strong_rand_bytes(8))}",
  password: "supersecret",
})

您可以使用
Enum.into/2
合并两个枚举。如果希望关键字列表作为结果,则关键字列表应为第二个参数,如果希望映射作为结果,则映射应为第二个参数。我猜你想要一张地图,这意味着你可以:

changes = Enum.into(attrs, %{
  name: "Some User",
  username: "user#{Base.encode16(:crypto.strong_rand_bytes(8))}",
  password: "supersecret",
})
changes = Enum.into(attrs, %{
  name: "Some User",
  username: "user#{Base.encode16(:crypto.strong_rand_bytes(8))}",
  password: "supersecret",
})
iex(1)> Enum.into(%{a: 1}, [b: 2])
[b: 2, a: 1]
iex(2)> Enum.into([b: 2], %{a: 1})
%{a: 1, b: 2}