2 votes

Fusionner des cartes Elixir

Comment fusionner ces 2 cartes 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}]}

... pour obtenir le résultat suivant :

%{a: 1, b: 2, c: [%{d: 3, e: 4}, %{d: 5, e: 6}, %{d: 7, e: 8}, %{d: 9, e: 0}]}

Simple Map.merge(foo,bar) ne le fait pas de la façon dont la valeur de c est une liste.

Merci d'avance ! Christoph

3voto

mudasobwa Points 5530

Utilice Map.merge/3 :

Map.merge(foo, bar, fn
  _k, v1, v2 when is_list(v1) and is_list(v2) -> v1 ++ v2 # lists
  _k, %{} = v1, %{} = v2 -> Map.merge(v1, v2)             # maps
  _k, v1, v1 -> v1                                        # equals
  _k, v1, v2 -> {v1, v2}                                  # non-equals
end)
# %{a: 1, b: 2,
#    c: [%{d: 3, e: 4}, %{d: 5, e: 6}, %{d: 7, e: 8}, %{d: 9, e: 0}]}

Vous n'avez pas spécifié de règle pour fusionner quoi que ce soit, à l'exception des listes, mais la règle ci-dessus peut être facilement étendue pour gérer n'importe quoi. Il comprend maintenant les listes, les cartes, les valeurs égales et les valeurs non égales.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X