在 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.
以外的平台上尝试测试
在 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.
以外的平台上尝试测试