列出缺点到功能?
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
因为erlang是函数语言,不同于c,javascript,它是复制变量并修改它,而不是仅仅修改它。因此不可能压缩到o(A)。length(A)是新增元素的长度。
将短列表添加到长列表的开头很便宜 - ++
运算符的执行时间与第一个列表的长度成正比。复制第一个列表,第二个列表不加修改直接添加到尾部
所以在你的例子中,那将是:
lists:reverse(MyNewElements) ++ MyList
(lists:reverse/1
的执行时间也与参数的长度成正比。)
除了已经提供的选项之外,还有一个选项就是
NewDeepList = [MyList | DeepList]
并修改 reading/traversing 以能够处理 [[element()]]
而不是 [element()]
。
我经常想要获取一个列表并将每个元素都放入现有列表中。
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
因为erlang是函数语言,不同于c,javascript,它是复制变量并修改它,而不是仅仅修改它。因此不可能压缩到o(A)。length(A)是新增元素的长度。
将短列表添加到长列表的开头很便宜 - ++
运算符的执行时间与第一个列表的长度成正比。复制第一个列表,第二个列表不加修改直接添加到尾部
所以在你的例子中,那将是:
lists:reverse(MyNewElements) ++ MyList
(lists:reverse/1
的执行时间也与参数的长度成正比。)
除了已经提供的选项之外,还有一个选项就是
NewDeepList = [MyList | DeepList]
并修改 reading/traversing 以能够处理 [[element()]]
而不是 [element()]
。