2

この質問は実際には 2 つあります。

  1. Array のループは、その要素の単純なループと比較して、どのようにfor eachパフォーマンスを比較しますか?for

  2. ループは順序トラバーサルを保証しますか? 次のコードは「はい」と言っています:

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

しかし、他の (シニア レベルの) エンジニアが、トラバーサルが常に昇順で進行するとは限らないことを断言しているのを聞いたことがあります。これは本当ですか?

4

3 に答える 3

6

とさまざまなコレクション (配列、ベクトルなど)を比較したJackson Dunstanによって実証されたように、パフォーマンスのランキングは (最速から最も遅いものへ):forfor eachfor in

  1. for
  2. for each
  3. for in(非常に遅い)

すべての場合においてfor、すべての中で最速です。特に配列やベクトルで使うとfor圧倒的な性能を発揮します。これらはすべてのコレクションの数値です (小さいほど高速です)。

ジャクソン・ダンスタンによるループスピードリダックス

于 2013-05-31T03:49:06.960 に答える
-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
于 2013-04-10T09:13:06.747 に答える