とんたんの技術メモ

注)ただのメモです。

Elixirの配列操作いろいろメモ

コレクションをキーでグループ化して、指定キーに追加する

# こんな配列を…
inputs = [
  %{
    a: 1,
    b: [
      %{aa: 1}
    ]
  },
  %{
    a: 1,
    b: [
      %{aa: 2}
    ]
  },
  %{
    a: 2,
    b: [
      %{aa: 3}
    ]
  }
]

# こうしたい…
outputs = [
  %{
    c: 1,
    d: [
      %{cc: 1},
      %{cc: 2}
    ]
  },
  %{
    c: 2,
    d: [
      %{cc: 3}
    ]
  }
]

# こんなんどうかな1
outputs = inputs
  |> Enum.group_by(&Map.take(&1, [:a]))
  |> Enum.map(fn {k, v} ->
    %{
      c: k.a,
      d: Enum.map(v, fn v2 ->
        %{
          cc: v2.aa
        }
      end)
    }
  end)

# こんなんどうかな2
Enum.chunk_byで配列を分割して、分割された配列ごとにget_inするほうが簡単かも?後で試す