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

时间:2017-07-26 10:21:59

标签: haxe

在Haxe中清除阵列最有效的方法是什么? 目前我只是为变量分配一个空数组。

我在互联网上找到了这个:

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

这是最好的方法吗?我关注两个目标,JS和CPP。

1 个答案:

答案 0 :(得分:7)

在大多数情况下,您可以简单地使用重新分配到空数组来清除数组;如果对数组的引用很重要,这只会产生问题。在那种情况下,你所做的很好。

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

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

Splice Clear:

array.splice(0, array.length);

长度清除:

untyped array.length = 0;

作业明确:

array = [];

Pop Clear:

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

以下所示的所有时间均代表执行相同操作一百万次所需的总时间。

在Neko:

  • 拼接:0.51秒
  • 长度:0.069秒
  • 作业:0.34秒
  • Pop :0.071到0.179秒(随阵列变大而线性缩放)

在HTML5中:

  • 拼接:0.29秒
  • 长度:0.046秒
  • 作业:0.032秒
  • Pop :0.012秒

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

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

我的测试是在Github,以防有人想要查看方法并尝试在Neko和HTML5以外的平台上进行测试。