这个问题实际上是双重的:
循环遍历数组的for each
如何通过其元素与简单的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; }
但是我听到其他(高级)工程师发誓说,遍历并不总是按升序进行!这是真的吗?
答案 0 :(得分:5)
正如Jackson Dunstan所示,谁将for
,for each
和for in
与不同的集合(数组,向量等)进行了比较,性能排名为(从最快到最慢的):
for
for each
for in
(非常慢)在所有情况下for
都是最快的。特别是当与数组或向量一起使用时,for
具有压倒性的性能。这些是所有集合的数字(更小意味着更快):
答案 1 :(得分:-1)
请查看我的帖子Flex Array Performance: For vs. ForEach
一些代码
var size:Number = 10000000;
var arr:Array = [];
for (var i:int=0; i
var time:Number, o:Object;
// for()
time = getTimer();
for (i=0; i=0; i--) { arr[i]; }
trace("for reversed test: "+(getTimer()-time)+"ms");
// for..in
time = getTimer();
for each(o in arr) { o; }
trace("for each test: "+(getTimer()-time)+"ms");
结果
for test: 124ms
for reversed test: 110ms
for each test: 261ms