Array.sortOn()でgetterフィールドをソートしても怖くない
forked from trace("自分用") (diff: 50)
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;
}
}
