我有一个列表嵌套在另一个列表中,深度为 3。
[
[[1, 2, 3], [4, 5, 6]],
[[1, 2, 3], [4, 5, 6]]
]
使用后
List.flatten/1
我的结果是
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]
我想用下面相同的方式将其展平,同时仍然保持内部元素的相同顺序不变。
[
[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]
]
我想知道是否有办法使用 Elixir 定义的函数来做到这一点,我查阅了 Elixir 文档,但无法找到一种方法来做到这一点而不展平整个列表。
在这个嵌套级别,您似乎想要使用每个子列表的内容创建一个新列表。
Enum.reduce/3
来执行此操作,例如:
l = [
[[1, 2, 3], [4, 5, 6]],
[[1, 2, 3], [4, 5, 6]]
]
Enum.reduce(l, [], fn sl, acc ->
acc ++ sl
end)
这将产生:
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
因为你从一个空列表作为累加器开始,然后只需将每个列表的元素直接添加到它即可。
只需使用
&Enum.concat/1
:
Enum.concat([
[[1, 2, 3], [4, 5, 6]],
[[1, 2, 3], [4, 5, 6]]
])
退货
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]