在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"
非常感谢!
虽然其他答案都正确,但我在这里使用 for
和模式匹配:
iex(1)> nested_map_list = [
...(1)> %{foo: %{test: "Hi"}},
...(1)> %{bar: %{test: "Hello"}},
...(1)> %{baz: %{test: "Hey"}}
...(1)> ]
iex(2)> for x <- nested_map_list, {_, %{test: test}} <- x, do: IO.puts(test)
Hi
Hello
Hey
Enum.reduce
, Enum.each
和朋友能够在 key=>value
pairs上迭代,因此在这种情况下,我可能会将其分为两个函数,一个在列表成员上迭代,一个迭代,一个迭代的功能在地图上。如果要存储结果(通常需要的(,则需要减少而不是Enum.each
。
Enum.each(nested_map_list, fn(element) ->
Enum.each(element, fn({_k, value}) ->
IO.inspect(value[:test])
end)
end)
哦,这是我刚刚解决的一种可能性 -
Enum.each(nested_map_list, fn(nested_data) ->
[{key, value}] = Map.to_list(nested_data)
IO.puts value.test
end)
开放任何较差的答案。