《Vectorなら?》VectorもShift Unshift おもすぎ!!
forked from forked from: Shift Unshift おもすぎ!! (diff: 4)
bkzenさんのつぶやきを受けてテスト shiftも"reverse"してpop()した方が速いっぽい?
ActionScript3 source code
/**
* Copyright famibee2 ( http://wonderfl.net/user/famibee2 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/xOx9
*/
// 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 = [];
private var array:Vector.<Number> = Vector.<Number> ([]);
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";
}
}
}
