0

我正在尝试使用枚举函数更改列表的格式。

原始列表如下所示

myInitialList = 
[
 {1,
   [
     ["A3", "Teddy"],
     ["B3", "t@gmail.com"],
     ["C3", "56123456"],
     ["D3", "spain"]
   ]},
  {2,
   [
     ["A4", "Katrin"],
     ["B4", "m@yahoo.com"],
     ["C4", "85002145"],
     ["D4", "USA"]
   ]},
  {3,
   [
     ["A2", "name"],
     ["B2", "email"],
     ["C2", "phone"],
     ["D2", "country"]
   ]}
]

我想过滤上面的列表以获得以下结果

myFinalList = 
[
    %{
        name: "Teddy", 
        email: "t@gmail.com", 
        phone: "56123456", 
        country: "spain"
    }, 
    %{
        name: "Katrin", 
        email: "m@yahoo.com", 
        phone: "85002145", 
        country: "USA"
    }
]

有谁知道我如何构建过滤器功能?

这将使我能够轻松地将数据插入到我的数据库中。我没有真正尝试过任何事情,因为我从一开始就完全陷入困境

在代码中,它应该看起来像

myFinalList = myInitialList |> Enum.filter(.....)
4

2 回答 2

1

您正在寻找该Enum.map/2功能。哟可以myFinalList用这种格式这样做:

myFinalList =
  Enum.map(myInitialList, fn
    {_index, [[_, name], [_, email], [_, phone], [_, country]]} ->
      %{
        name: name,
        email: email,
        phone: phone,
        country: country
      }
  end)
于 2019-06-16T21:17:19.493 回答
0

首先,您需要将输入拆分为名称和实际值:

[names | items] = myInitialList |> Enum.reverse()

items这里是相反的顺序,但没关系。

现在让我们定义映射器:

mapper =
  fn {_, lists} -> Enum.map(lists, fn [_, e] -> e end) end

最后:

for values <- Enum.reverse(items),
  do: Enum.into(Enum.zip(mapper.(names), mapper.(values)), %{})
于 2019-06-17T05:28:06.180 回答