使用另一个映射中的值更新映射中的所有值 (Elixir)

Sam*_*ira 2 hashmap elixir phoenix-framework

如何使用另一个映射的相应键的值来更新映射中的所有值?例如我有以下两张地图:

map = %{"December 2021" => 0, "November 2021" => 0, "October 2021" => 0}
map_2 = %{"December 2021" => 7, "November 2021" => 6}
Run Code Online (Sandbox Code Playgroud)

我想用map_2中的相应值更新map中的所有值,所以最后map = %{"December 2021" => 7, "November 2021" => 6, "October 2021" => 0}

我努力了:

Enum.map(map_2, fn {key, value} -> %{map | k => v} end)
Run Code Online (Sandbox Code Playgroud)

我还尝试了上面的代码以及其他函数(例如 Map.update!/3 和类似函数),但它们都返回一个列表,其中包含 Enum.map 每次迭代的映射。

有人知道如何做吗?

提前致谢

zwi*_*pie 5

我认为您正在寻找Enum.reduce/3。这里的Reduce意味着将集合减少到单个值。这里要减少的集合是map_2。您开始的初始/单个值是原始集合map。输出是初始值的修改。

在此示例中, 的每个键/值map_2都传递给也需要累加器的函数accacc使用初始值map(Enum.reduce 的第二个参数)进行初始化。在这种情况下, 的每个值map_2都会添加到map

map = %{"December 2021" => 0, "November 2021" => 0, "October 2021" => 0}
map_2 = %{"December 2021" => 7, "November 2021" => 6}

Enum.reduce(map_2, map, fn {key, value}, acc ->
  Map.put(acc, key, value)
end)

#> %{"December 2021" => 7, "November 2021" => 6, "October 2021" => 0}
Run Code Online (Sandbox Code Playgroud)

如果您想要不同的行为,例如,不要添加 中map_2不存在的键的值map:尝试更改reducer 函数。