合并 Elixir 地图

ctp*_*ctp 4 maps elixir

我怎样才能合并这 2 个 Elixir 地图:

foo = %{a: 1, b: 2, c: [%{d: 3, e: 4}, %{d: 5, e: 6}]}
bar = %{a: 1, b: 2, c: [%{d: 7, e: 8}, %{d: 9, e: 0}]}
Run Code Online (Sandbox Code Playgroud)

...得到以下结果:

%{a: 1, b: 2, c: [%{d: 3, e: 4}, %{d: 5, e: 6}, %{d: 7, e: 8}, %{d: 9, e: 0}]}
Run Code Online (Sandbox Code Playgroud)

SimpleMap.merge(foo,bar)不会这样做,因为 c 的值是一个列表。

先感谢您!克里斯托夫

Ale*_*kin 5

使用Map.merge/3

\n\n\n\n
Map.merge(foo, bar, fn\n  _k, v1, v2 when is_list(v1) and is_list(v2) -> v1 ++ v2 # lists\n  _k, %{} = v1, %{} = v2 -> Map.merge(v1, v2)             # maps\n  _k, v1, v1 -> v1                                        # equals\n  _k, v1, v2 -> {v1, v2}                                  # non-equals\nend)\n#\xe2\x87\x92\xc2\xa0%{a: 1, b: 2,\n#    c: [%{d: 3, e: 4}, %{d: 5, e: 6}, %{d: 7, e: 8}, %{d: 9, e: 0}]}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您没有指定合并除列表之外的任何内容的规则,但上面的内容可以轻松扩展以处理任何内容。现在它可以理解列表、映射、相等值和不相等值。

\n