Erlang - 合并地图

yur*_*rii 1 erlang maps

我试图弄清楚如何以maps允许我使用相同键处理元素的方式合并两个.

例如,合并

#{"Ala" => 1,"kota" => 3}

#{"kota" => 4}

应该导致:

#{"Ala" => 1,"kota" => 7}

Dog*_*ert 7

有Erlang中没有内置函数正是这样做的,但它可以用做maps:fold/3maps:update_with/4这样的:

1> A = #{"Ala" => 1,"kota" => 3}.
#{"Ala" => 1,"kota" => 3}
2> B = #{"kota" => 4}.
#{"kota" => 4}
3> maps:fold(fun(K, V, Map) -> maps:update_with(K, fun(X) -> X + V end, V, Map) end, A, B).
#{"Ala" => 1,"kota" => 7}
Run Code Online (Sandbox Code Playgroud)

代码基本上是这样的:对于B中的每个项目,如果A中存在相同的密钥,则获取值(V)并添加当前值(X).如果它不存在,则将值设置为V

  • 你是二十八岁以上的二郎吗?在Erlang 19中添加了此功能:https://github.com/erlang/otp/commit/8d5bc31684f8b6969b5bfde70e25b153d4018f61. (4认同)