在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以外的平台上的测试。
'array = [];'创建一个新实例,如果您引用了旧数组,则可能会导致意外的结果。 –