我怎样才能合并这 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 的值是一个列表。
先感谢您!克里斯托夫
使用Map.merge/3:
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}]}\nRun Code Online (Sandbox Code Playgroud)\n\n您没有指定合并除列表之外的任何内容的规则,但上面的内容可以轻松扩展以处理任何内容。现在它可以理解列表、映射、相等值和不相等值。
\n| 归档时间: |
|
| 查看次数: |
1072 次 |
| 最近记录: |