【发布时间】:2013-04-02 00:00:09
【问题描述】:
这个问题真的是双重的:
for each循环遍历 Array 与简单的for循环遍历其元素在性能方面有何不同?循环是否保证顺序遍历?下面的代码说是:
var sample_array:Array = []; for (var i:uint = 0; i < 10000; i++) sample_array.push(i); i = 0; for each(var value:uint in sample_array) { sample_array[i++] = value; } trace('in order was:', check_in_order(sample_array)); function check_in_order(array:Array):Boolean { for (var i:uint = 0, l:uint = array.length; i < l; ++i) { if (array[i] != i) return false; } return true; }
但我听说其他(高级)工程师上下发誓,遍历并不总是按升序进行!这是真的吗?
【问题讨论】:
-
也看看jacksondunstan.com/articles/1978。这是 Jackson Dunstan 比较 for、for-in 和 for-each 的一篇很棒的文章。
-
@Dovyski - 将其作为答案发布,我会接受;老兄在基准测试方面做得很好(唯一可能缺少的是包含可变大小的数组)。
-
@Joetjah - 谢谢。回覆。 “对于每个保证的顺序?” - Jon Skeet 变得好战了! AS3 对 ECMA 文档的权利,该文档既不确认也不否认顺序遍历。用 Skeet 先生的话来说——“说实话,这有点令人不满意 :(”在我运行的测试中,我从未见过每次 Array 遍历都出局或有序,因为它的价值。
-
@Sensei James 我已经发布了我的答案:) 关于你所说的,我同意:唯一缺少的是一个可变大小的数组。但是我不相信它会损害 read 操作期间的性能。
标签: actionscript-3 flash