我经常想把一个列表中的每个元素都合并到一个现有的列表中。
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
有1 M个元素,而MyNewElements
只有几个元素,我希望高效地完成此操作。
我不知道这些函数中的哪一个--如果有的话--做了我想做的事情:https://www.erlang.org/doc/man/lists.html
3条答案
按热度按时间tzdcorbm1#
在一个长列表的开头添加一个短列表的代价很小--
++
操作符的执行时间与第一个列表的长度成正比,第一个列表被复制,第二个列表作为尾部添加,不做修改。在您的示例中,这将是:
(The
lists:reverse/1
的执行时间也与参数的长度成比例。)iovurdzv2#
除了已经提供的选择外,另一个选择是
并修改阅读/遍历以能够处理
[[element()]]
而不是[element()]
。92dk7w1h3#
因为erlang是函数语言,不同于c、javascript,它是复制变量并修改变量,而不是简单的修改变量,所以不可能压缩到o(A),length(A)是新增元素的长度。