从地图列表中获取 %{key,value}

Get %{key,value} from list of map

我有嵌套地图的列表

[ %{
    "name" => "sam",
    "p" => [
      %{
        "amount" => "",
      }
    ],
    "group" => "a",   
},   
%{
    "name" => "lisa",
    "p" => [
      %{
        "amount" => "",
      }
    ],
    "group" => "a",   
}, 
 %{
    "name" => "joe",
    "p" => [
      %{
        "amount" => "",
      }
    ],
    "group" => "b",   
} ]

我必须遍历列表以从列表中获取 name 以及 amount,如果组是 a 然后检索 amount ,否则将 nil 放入地图。这样最终的列表看起来像

[
  %{name: "sam",amount: ""},
  %{name: "lisa", amount: ""},
  %{name: "joe", amount: nil}
]

谁能帮我解决这个问题?

您需要映射您的元素,因此 Enum.map/2 具有匹配不同情况的不同功能子句似乎是最合适的。

Enum.map(data, fn
  %{"group" => "a", "name" => name, "p" => [%{"amount" => amount}]} ->
    %{name: name, amount: amount}

  %{"name" => name} ->
    %{name: name, amount: nil}
end)
#⇒[
#   %{amount: "", name: "sam"},
#   %{amount: "", name: "lisa"},
#   %{amount: nil, name: "joe"}
# ]