如何将列表从一种格式更改为另一种格式

时间:2019-06-16 19:01:23

标签: elixir

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

原始列表如下

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(.....)

2 个答案:

答案 0 :(得分:1)

您正在寻找Enum.map/2函数。您可以通过以下格式获取myFinalList

myFinalList =
  Enum.map(myInitialList, fn
    {_index, [[_, name], [_, email], [_, phone], [_, country]]} ->
      %{
        name: name,
        email: email,
        phone: phone,
        country: country
      }
  end)

答案 1 :(得分: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)), %{})