将数据从一种形式转换为另一种形式

aas*_*ash 3 elixir

我有以下列表:

l = [
        %{id: 1, name: "aash", possess: "car"}, 
        %{id: 1, name: "aash", possess: "bike"}, 
        %{id: 2, name: "rahul", possess: "scooter"}
]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为以下格式:

ans = [
        %{id: 1, name: "aash", possess: ["car", "bike"]},
        %{id: 2, name: "rahul", possess: ["scooter"]}
]
Run Code Online (Sandbox Code Playgroud)

关于如何在灵药中做到这一点的任何想法?由于所有变量都是不可变的,我不知道如何实现上述转换.

Dog*_*ert 7

我将使用Enum.group_by/3mapper函数(第三个参数)仅返回possess字段.

[
  %{id: 1, name: "aash", possess: "car"}, 
  %{id: 1, name: "aash", possess: "bike"}, 
  %{id: 2, name: "rahul", possess: "scooter"}
]
|> Enum.group_by(&{&1.id, &1.name}, & &1.possess)
|> Enum.map(fn {{id, name}, possess} ->
  %{id: id, name: name, possess: possess}
end)
|> IO.inspect
Run Code Online (Sandbox Code Playgroud)

输出:

[%{id: 1, name: "aash", possess: ["car", "bike"]},
 %{id: 2, name: "rahul", possess: ["scooter"]}]
Run Code Online (Sandbox Code Playgroud)