在Haxe中清除Array的正确方法是什么?

问题描述:

清除Haxe中Array的最高性能方法是什么? 目前我正在分配变量持有数组到一个空的。 这是我在互联网上找到:在Haxe中清除Array的正确方法是什么?

public static function clear(arr:Array<Dynamic>){ 
     #if (cpp) 
      arr.splice(0,arr.length); 
     #else 
      untyped arr.length = 0; 
     #end 
    } 

这是最好的办法吗? 我关心两个目标:js和cpp。

大多数情况下,您可以简单地使用重新分配给空数组来清除数组;如果对数组的引用很重要,这只会成为问题。在那种情况下,你有什么效果很好。

这就是它的答案,但出于好奇的缘故,我决定尝试计算一些清除数组的方法。不幸的是,我有一段时间没有使用过Haxe,而且我的电脑配置中的某些内容必须改变,所以我现在只能编译为Neko和HTML5。无论如何,结果都很有趣。

对于测试,我运行了四种不同的清晰算法,通过长度从8到1048576整数的数组。该算法如下:

拼接清除:

array.splice(0, array.length); 

长度清除:

untyped array.length = 0; 

分配清除:

array = []; 

流行清除:

while (array.length > 0) 
    array.pop(); 

下面显示的所有时间表示执行相同操作100万次所花费的总时间。

在ネ:

  • 熔接:0.51秒
  • 长度:0.069秒
  • 分配:0.34秒
  • 流行:0.071到0.179秒(鳞线性随着阵列变大)

在HTML5:

  • 熔接:0.29秒
  • 长度:0.046秒
  • 分配:0.032秒
  • 流行:0。012秒

这些测试是在64位Windows 7机器和Firefox上运行的。

我有点惊讶while循环方法是javascript中的禁食算法;它让我觉得那里正在发生着一些事情。否则,在支持它的平台上,长度方法很好。

我的测试是在Github的情况下,如果有人想同行审查的方法,也许尝试在除了Neko和HTML5以外的平台上的测试。

+3

'array = [];'创建一个新实例,如果您引用了旧数组,则可能会导致意外的结果。 –