为什么这个基本列表运算符在Elixir的长列表中比这个更长?

时间:2016-11-30 21:24:58

标签: elixir

所以在elixir 1.3.2中,我创建了2个大型列表:

a++b

我注意到a--b快速返回结果,但$.when(system.sideEngine.fetch(), system.lifeSupport.fetch()).done( ... 需要很长时间才能返回结果。这是为什么?

1 个答案:

答案 0 :(得分:3)

我认为组合数组只需要为新数组分配内存然后将两个数组放在已分配的内存中。

要计算两个数组的差异,在第一个数组中搜索第二个数组的每个元素(当找到元素时,将从第一个数组中删除元素。)

加法的复杂度为O(n),减法的复杂度为O(n2)。

来自文档 - http://elixir-lang.org/docs/stable/elixir/Kernel.html

complexity of a ++ b与长度(a)成正比,因此请避免重复附加到任意长度的列表,例如list ++ [item]。

complexity of a -- b与长度(a)*长度(b)成正比,这意味着如果a和b都是长列表,它将非常慢。在这种情况下,请考虑将每个列表转换为MapSet并使用MapSet.difference/2