Elixir - 合并列表元素
Elixir - merge list elements
我有一个列表
extensions = [
[
%{extension: "zip", size: 3627, type: "archives"},
%{extension: "xml", size: 3627, type: "documents"}
],
[
%{extension: "png", size: 458605, type: "graphics"},
%{extension: "png", size: 458605, type: "graphics"}
]
]
我需要合并列表元素以获得:
extensions = [
%{extension: "zip", size: 3627, type: "archives"},
%{extension: "xml", size: 3627, type: "documents"},
%{extension: "png", size: 458605, type: "graphics"},
%{extension: "png", size: 458605, type: "graphics"}
]
我找不到合适的解决方案。我将不胜感激。
您可以使用 List.flatten/1
:
iex> List.flatten(extensions)
[
%{extension: "zip", size: 3627, type: "archives"},
%{extension: "xml", size: 3627, type: "documents"},
%{extension: "png", size: 458605, type: "graphics"},
%{extension: "png", size: 458605, type: "graphics"}
]
虽然@Daniel 提供的答案在这种特殊情况下是完全正确的,但需要对 List.flatten/1
保持谨慎,因为它 非常扁平 。所提问题的准确答案是
extensions
|> :lists.reverse()
|> Enum.reduce(&++/2)
为了理解差异,让我们考虑一下我们有以下输入。
# ⇓⇓⇓
extensions = [[1, 2], [3, [4]]]
List.flatten(extensions)
#⇒ [1, 2, 3, 4]
extensions |> :lists.reverse() |> Enum.reduce(&++/2)
#⇒ [1, 2, 3, [4]]
我有一个列表
extensions = [
[
%{extension: "zip", size: 3627, type: "archives"},
%{extension: "xml", size: 3627, type: "documents"}
],
[
%{extension: "png", size: 458605, type: "graphics"},
%{extension: "png", size: 458605, type: "graphics"}
]
]
我需要合并列表元素以获得:
extensions = [
%{extension: "zip", size: 3627, type: "archives"},
%{extension: "xml", size: 3627, type: "documents"},
%{extension: "png", size: 458605, type: "graphics"},
%{extension: "png", size: 458605, type: "graphics"}
]
我找不到合适的解决方案。我将不胜感激。
您可以使用 List.flatten/1
:
iex> List.flatten(extensions)
[
%{extension: "zip", size: 3627, type: "archives"},
%{extension: "xml", size: 3627, type: "documents"},
%{extension: "png", size: 458605, type: "graphics"},
%{extension: "png", size: 458605, type: "graphics"}
]
虽然@Daniel 提供的答案在这种特殊情况下是完全正确的,但需要对 List.flatten/1
保持谨慎,因为它 非常扁平 。所提问题的准确答案是
extensions
|> :lists.reverse()
|> Enum.reduce(&++/2)
为了理解差异,让我们考虑一下我们有以下输入。
# ⇓⇓⇓
extensions = [[1, 2], [3, [4]]]
List.flatten(extensions)
#⇒ [1, 2, 3, 4]
extensions |> :lists.reverse() |> Enum.reduce(&++/2)
#⇒ [1, 2, 3, [4]]