List Cons-Into Function?



我经常想把一个列表中的每个元素都放到一个现有的列表中。

MyList = [3,2,1],
MyNewElements = [4,5,6],
MyNewList = lists:foldl(fun(A, B) -> [A | B] end, MyList, MyNewElements).
%% [6,5,4,3,2,1]

假设MyList有1M个元素,而MyNewElements只有几个元素,我想有效地做到这一点。

我不知道这些函数中的哪个-如果有的话-做了我想做的事情:https://www.erlang.org/doc/man/lists.html

将短列表添加到长列表的开头是便宜的-++操作符的执行时间与第一个列表的长度成正比。复制第一个列表,不加修改地将第二个列表添加为尾部。

在你的例子中,就是:

lists:reverse(MyNewElements) ++ MyList

(lists:reverse/1的执行时间也与参数的长度成正比)

除了已经提供的选项外,还可以使用

NewDeepList = [MyList | DeepList]

和修改读取/遍历,以能够处理[[element()]]而不是[element()]

因为erlang是函数式语言,不同于c、javascript,它是复制变量并修改它,而不仅仅是修改它。因此不可能压缩到0 (A).length(A)是新添加元素的长度。

最新更新