Elixir - 地图结构上的模式匹配,而不是键

时间:2018-02-25 20:49:32

标签: elixir

在Elixir中,我有一个嵌套地图列表,每个地图都有相同的基本结构 - 例如:

nested_map_list = [
    %{foo: %{test: "Hi"}},
    %{bar: %{test: "Hello"}},
    %{baz: %{test: "Hey"}}
]

因此,它们在上层各有一个不同的键,但在嵌套映射中有相同的键。有没有办法可以迭代这个列表,以便每次迭代访问嵌套映射,而不管上层的键?

为了说明我的意思,请考虑这个伪代码:

Enum.each(nested_map_list, fn(%{_key: nested_data}) -> IO.puts nested_data.test end)

> "Hi"
> "Hello"
> "Hey"

非常感谢!

2 个答案:

答案 0 :(得分:1)

Enum.reduceEnum.each和朋友可以对key=>value对进行迭代,因此在这种情况下我可能会将其分为两个函数,一个迭代列表成员,和一个在地图上迭代的人。如果您想存储结果(通常需要),则需要减少而不是Enum.each

Enum.each(nested_map_list, fn(element) ->
    Enum.each(element, fn({_k, value}) ->
        IO.inspect(value[:test])
    end)
end)

答案 1 :(得分:0)

噢,好吧,我刚刚整理出来的一种可能性 -

Enum.each(nested_map_list, fn(nested_data) ->
  [{key, value}] = Map.to_list(nested_data)
  IO.puts value.test
end)

打开任何更快的答案。