加入 2 个列表的最快方法?

Fastest way to join 2 lists?

我正在制作一个程序,在一个非常具体的部分,我需要加入 2 个对象列表。我一直使用 append 来做这样的事情,但我读过 append 并没有那么快。我需要加入的这两个列表最终会增长。所以我正在寻找计算机最快的方法

我应该使用

(append list1 list2)

或更好:

(foldr cons list1 list2)

我不介意元素的顺序。

对于等长的列表,这应该稍微快一些:

(foldl cons list1 list2)

为什么?因为它在 list1head 开始 consing 来自 list2 的元素,而 append 将首先 cons 所有在最后 consing list2 之前 list1 的元素 - 请注意我使用的是 foldl,而不是 foldr。这将有 运行ning 常量 space 的好处(因为尾递归)。

换句话说:foldl 解 运行 是常量 space 并且是 O(length-of-list2)append 解是 O(length-of-list1) 而不是 运行 常量 space,如果列表的长度不同,请记住这一点。