// [実験] Array.RETURNINDEXEDARRAYってどうよ?(Vectorも追加) // // 手持ちの環境では Array.RETURNINDEXEDARRAY を使わない方が速い。 // 要素を交換する方が速いのは意外。 // // 修正:Vector.sortの比較関数を変更、かなり速くなりました。 package { import flash.display.*; import flash.text.*; import flash.utils.*; public class Main extends Sprite { private var _array1:Array; private var _array2:Array; private var _vector:Vector.<Number>; private function _compare(x:Number, y:Number):Number { return x - y; } public function Main():void { var n:uint = 10000; _array1 = new Array(n); _vector = new Vector.<Number>(n); for(var i:uint = 0; i < 10000; ++i) { _array1[i] = _vector[i] = Math.random(); } _array2 = _array1.concat(); var indices:Array; _setup(); _measure("Case 1 : Array.RETURNINDEXEDARRAY を使う", function ():void { indices = _array1.sort(Array.NUMERIC | Array.RETURNINDEXEDARRAY); }, 100); _measure("Case 2 : Array.RETURNINDEXEDARRAY を使わない", function ():void { _array2.sort(Array.NUMERIC); }, 100); _measure("Case 3 : Vector.sort(compareFunction)", function ():void { _vector.sort(_compare); }, 100); _measure("ソート後の全要素へのアクセス(Case : 1)", function ():void { for(var i:uint = 0; i < n; ++i) { _array1[indices[i]]; } }, 100); _measure("ソート後の全要素へのアクセス(Case : 2)", function ():void { for(var i:uint = 0; i < n; ++i) { _array1[i]; } }, 100); _measure("ソート後の全要素へのアクセス(Case : 3)", function ():void { for(var i:uint = 0; i < n; ++i) { _vector[i]; } }, 100); } private function _measure( title:String, func:Function, numTimes:uint, ...params):void { _time = getTimer(); for (var i:int = 0; i < numTimes; i++) { func.apply(null, params); } _time = getTimer() - _time; _debug("[ " + title + " ] --> " + _time + " ms"); } private function _debug(log:String):void { _field.appendText(log + "\n"); } private var _field:TextField; private var _time:uint; private function _setup():void { _field = new TextField(); _field.width = stage.stageWidth; _field.height = stage.stageHeight; var format:TextFormat = _field.defaultTextFormat; format.font = "_sans"; _field.defaultTextFormat = format; addChild(_field); } } } Array.RETURNINDEXEDARRAYってどうよ?(Vector.sortも追加した)