AS3数组“为每个... in”性能与for循环,并按顺序保证?

时间:2013-04-10 08:36:38

标签: actionscript-3 flash

这个问题实际上是双重的:

  1. 循环遍历数组的for each如何通过其元素与简单的for循环进行性能比较?

  2. 循环中是否保证循环?以下代码表示是:

  3. 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;
    }
    

    但是我听到其他(高级)工程师发誓说,遍历并不总是按升序进行!这是真的吗?

2 个答案:

答案 0 :(得分:5)

正如Jackson Dunstan所示,谁将forfor eachfor in与不同的集合(数组,向量等)进行了比较,性能排名为(从最快到最慢的):

  1. for
  2. for each
  3. for in(非常慢)
  4. 在所有情况下for都是最快的。特别是当与数组或向量一起使用时,for具有压倒性的性能。这些是所有集合的数字(更小意味着更快):

    Loop Speed Redux by Jackson Dunstan

答案 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