Эликсир - объединение двух карт с одинаковыми именами и значениями ключей в виде списков? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть две карты:

a = %{ list: [1,2,3]}
b = %{ list: [4,5,6]}

Я хочу объединить / объединить два вложенных списка, чтобы получить результат:

c = %{ list: [1,2,3,4,5,6]}

Я пытался изучить глубокое слияние, но в моем случае у меня есть списки, а не вложенные карты.

Ответы [ 2 ]

4 голосов
/ 06 марта 2019

Вы также можете использовать Map.merge/3, чтобы легко справиться с этим делом.Проверьте это:

a = %{ list: [1,2,3] }
b = %{ list: [4,5,6] }
c = Map.merge(a, b, fn _, la, lb -> la ++ lb end)

Наслаждайтесь!

2 голосов
/ 05 марта 2019

используйте оператор ++ для объединения списков

iex(1)> a = %{ list: [1,2,3]}
iex(2)> b = %{ list: [4,5,6]}
iex(3)> %{list:  a.list ++ b.list}
%{list: [1, 2, 3, 4, 5, 6]}

более обобщенно:

  def test_merge do
    a = %{ list: [1,2,3], list2: [10, 20]}
    b = %{ list2: [40, 30], list: [4,5,6]}
    keys = Map.keys(a)
    Enum.map(keys ,fn(key) -> {key, a[key] ++  b[key] }end) 
    |> Enum.into(%{})
  end

результат:

%{list: [1, 2, 3, 4, 5, 6], list2: [10, 20, 40]}

...