[英]AS3 Array "for each ... in" performance vs. for loop, and guaranteed in order?
這個問題真的是雙重的:
Array 上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; }
但我聽說其他(高級)工程師上下發誓,遍歷並不總是按升序進行! 這是真的?
這表現在傑克遜鄧斯坦 ,誰相比for
, for each
與for in
具有不同的集合(數組,矢量等),性能排名(從最快到最慢):
for
for each
for in
(極慢) 在所有情況下, for
都是最快的。 特別是與陣列或載體一起使用時, for
具有壓倒性的性能。 這些是所有集合的數字(越小意味着速度越快):
這是 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.