forked from: Shift Unshift おもすぎ!!

by KiKiKi forked from Shift Unshift おもすぎ!! (diff: 49)
bkzenさんのつぶやきを受けてテスト
shiftも"reverse"してpop()した方が速いっぽい?
♥0 | Line 100 | Modified 2009-10-15 22:36:38 | MIT License
play

ActionScript3 source code

/**
 * Copyright KiKiKi ( http://wonderfl.net/user/KiKiKi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/1Bsa
 */

// forked from keno42's Shift Unshift おもすぎ!!
// bkzenさんのつぶやきを受けてテスト
// forked from beinteractive's forked from: 関数のオーバーヘッドありすぎない?
// forked from keno42's 関数のオーバーヘッドありすぎない?
//
// shiftも"reverse"してpop()した方が速いっぽい?
//
package {
    import flash.display.Sprite;
    import flash.text.*;
    import flash.utils.*;
    public class FlashTest extends Sprite {
        private static const COUNT:uint = 20000;
        private var array:Array = [];
        public function FlashTest() {
            var tf:TextField = new TextField();
            addChild(tf);
            tf.autoSize = "left";
            // 環境によって?一番上の文字が見切れるので、一度改行。
            tf.text = "\n";
            tf.appendText( testReverse() );
            tf.appendText( testPush() );
            tf.appendText( testReverse() );            
            tf.appendText( testPush() );            
            tf.appendText( testReverse() );
            tf.appendText( testPush() );
            tf.appendText( testReverse() );
            tf.appendText( testPop() );
            tf.appendText( testPop() );
            tf.appendText( testPop() );
            tf.appendText( testUnshift() );
            tf.appendText( testUnshift() );
            tf.appendText( testUnshift() );
            tf.appendText( testShift() );
            tf.appendText( testShift() );
            tf.appendText( testShift() );
            tf.appendText( testOriginalUnshift() );   
            tf.appendText( testOriginalShift() );
        }
        private function testPush():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.push(i);
            }
            return "push(配列長" + (array.length-COUNT) +"->"+ array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testPop():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.pop();
            }
            return "pop(配列長" + (array.length+COUNT) +"->"+ array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testReverse():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < (COUNT/100); i++ ){
                array.reverse();
            }
            return "reverse(配列長" + array.length+ "を"+(COUNT/100)+"回): " + String(getTimer()-time) + "\n";
        }
        private function testShift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.shift();
            }
            return "shift(配列長"+ (array.length+COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testUnshift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            for( i=0; i < COUNT; i++ ){
                array.unshift(1);
            }
            return "unshift(配列長"+ (array.length-COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testOriginalUnshift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            array.reverse();
            for( i=0; i < COUNT; i++ ){
                array.push(i);
            }
            array.reverse();
            return "自作unshift(配列長"+ (array.length-COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        }
        private function testOriginalShift():String
        {
            var time:uint = getTimer();
            var i:Number, j:Number;
            array.reverse();
            for( i = 0; i < COUNT; i++) {
                array.pop();
            }
            array.reverse();
            return "自作shift(配列長"+ (array.length+COUNT) +"->" + array.length+ "): " + String(getTimer()-time) + "\n";
        } 
    }
}

Forked