Array.sortOn()でgetterフィールドをソートしても怖くない

by kaikoga forked from trace("自分用") (diff: 50)
♥0 | Line 61 | Modified 2009-07-17 21:51:33 | MIT License
play

ActionScript3 source code

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

// forked from kaikoga's trace("自分用")
package {

    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.text.TextFormat;
    
    public class FlashTest extends Sprite {
        
        public function FlashTest() {
            trace("sortOn()");
            var array:Array = [
                new A(0),
                new A(2),
                new A(4),
                new A(6),
                new A(7),
                new A(5),
                new A(3),
                new A(1)
            ];
            array.concat().sortOn("a");
            trace("getter A.a() called ", A.getterCount, "times");
            A.getterCount = 0;
            
            trace("sortOn() Array.RETURNINDEXEDARRAY");
            array.concat().sortOn("a", Array.RETURNINDEXEDARRAY);
            trace("getter A.a() called ", A.getterCount, "times");
            A.getterCount = 0;
            
            trace("sort()");
            array.concat().sort(function(a:A, b:A):int {
                return a.a - b.a;
            });
            trace("getter A.a() called ", A.getterCount, "times");
            A.getterCount = 0;
            
            trace("sort() Array.RETURNINDEXEDARRAY");
            array.concat().sort(function(a:A, b:A):int {
                return a.a - b.a;
            }, Array.RETURNINDEXEDARRAY);
            trace("getter A.a() called ", A.getterCount, "times");
            A.getterCount = 0;
            
        }
        
        private var _traceField:TextField;
        public function trace(...message):void {
            if (!this._traceField) {
                this._traceField = new TextField();
                this._traceField.width = this.stage.stageWidth;
                this._traceField.height = this.stage.stageHeight;
                this._traceField.defaultTextFormat = new TextFormat("_typewriter", 10);
                this.addChild(this._traceField);
            }
            this._traceField.appendText(message.join(" ") + "\n");
        }
        
    }
}

class A {
    
    public static var getterCount:int = 0;
    
    private var _a:int;
    public function get a():int {
        getterCount++;
        return this._a;
    }
    
    public function A(a:int) {
        this._a = a;
    }
    
}