簡體   English   中英

AS3 Array“for each ... in”性能與for循環,並按順序保證?

[英]AS3 Array "for each ... in" performance vs. for loop, and guaranteed in order?

這個問題真的是雙重的:

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

但我聽說其他(高級)工程師上下發誓,遍歷並不總是按升序進行! 這是真的?

這表現在傑克遜鄧斯坦 ,誰相比forfor eachfor in具有不同的集合(數組,矢量等),性能排名(從最快到最慢):

  1. for
  2. for each
  3. for in (極慢)

在所有情況下, for都是最快的。 特別是與陣列或載體一起使用時, for具有壓倒性的性能。 這些是所有集合的數字(越小意味着速度越快):

傑克遜·鄧斯坦(Jackson Dunstan)的Loop Speed Redux

這是 Adrian 的固定帖子

var size:Number = 10000000;
var arr:Array = [];
var time:Number, o:Object, i:int;
// fill container
for (i = 0; i < size; i++) arr[i] = i;

time = getTimer();
for (i=0; i<arr.length; i++){ arr[i]; }
trace("for test: "+(getTimer()-time)+"ms");

// for()
time = getTimer();
for (i=arr.length; 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");

// Result
for test: 212ms
for reversed test: 26ms
for each test: 103ms

請檢查我的文章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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM