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

What is the correct way to clear an array in Haxe?

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

我在网上找到这个:

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();

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

在 Neko 中:

  • 拼接:0.51秒
  • 长度:0.069秒
  • 分配:0.34秒
  • Pop:0.071 到 0.179 秒(随着数组变大线性缩放)

在HTML5中:

  • 拼接:0.29秒
  • 长度:0.046秒
  • 分配:0.032秒
  • 弹出: 0.012 秒

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

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

我的测试是在 Github 上进行的,以防有人想对这些方法进行同行评审,并可能在 Neko 和 HTML5.

以外的平台上尝试测试