什么是清除HAXE数组的正确方法?

问题描述 投票:6回答:1

什么是可清除HAXE数组最高效的方法是什么?目前,我只是分配一个空数组变量。

我发现这个在互联网上:

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

这是最好的办法吗?我所关心的两个目标,JS和CPP。

haxe
1个回答
7
投票

在大多数情况下,你可以简单地使用重新分配给一个空数组来清除阵列;如果参照数组是重要此仅成为问题。在这种情况下,你有什么效果很好。

这就是它的答案,但为了好奇,我决定尝试一些时间来清除阵列的方式。不幸的是,我没有用HAXE在一段时间有什么东西在我的电脑的配置必须有所改变,所以我只能编译成猫和HTML5的时刻。无论如何,结果是有趣的。

对于测试,我通过阵列从长度为8至1048576的整数跑四个不同的明确的算法。该算法如下:

拼接清除:

array.splice(0, array.length);

长度清除:

untyped array.length = 0;

分配清除:

array = [];

流行清除:

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

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

和猫:

  • 接头: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中最快的算法;这让我觉得有什么在那里发生。否则,该长度的方法是在支持它的平台好。

我的测试,以防万一有人想同行评议方法,也许尝试上比猫和HTML5等平台测试Github

© www.soinside.com 2019 - 2024. All rights reserved.