[AS3] Vector.concatの挙動にキョドった。

2010/04/16

こんにちは。きんくまです。
Graphics.drawPathなどPlayer10からの描画機能をするときに、Vectorは必須です。

VectorではVectorどうしをくっつけるconcatという関数がありまして、それを使う場面がよくあります。
ちなみに同じ配列のArrayのときは全く使ったことがなかったです。
って、concatを昨日まで全然知らなくて、Vectorのデータを手で入れていたのはナイショです。

そんで、Vector.concatの挙動を調べていたんですが、思ったようにならなかったのでメモです。

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class Main extends Sprite 
	{
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			var v1:Vector.<int> = Vector.<int>([0, 1]);
			var v2:Vector.<int> = Vector.<int>([2, 3]);
			var v3:Vector.<int> = Vector.<int>([4, 5]);
			
			var v4:Vector.<int> = new Vector.<int>();
			var v5:Vector.<int> = new Vector.<int>();
			var v6:Vector.<int> = new Vector.<int>();
			
			v4 = v4.concat(v1, v2, v3);
			trace(v4); //4,5,2,3,0,1
			
			v5 = v1.concat(v2, v3); 
			trace(v5); //0,1,4,5,2,3
			
			v6 = v1.concat(v2).concat(v3);
			trace(v6); //0,1,2,3,4,5

			v7 = v7.concat(v3, v2, v1);
			trace(v7); //0,1,2,3,4,5
		}
		
	}
	
}

ソースを見ていただくとわかると思うんですが、v4はv1,v2,v3と順番にいれていってるのに、
中身が順番にはいっていない!
v5,v6は参考までに。
だから、最初からうまくやるためには、v7のように逆順でconcatの引数をもたせてあげる必要があるんですね。
うーん。勉強になった。


自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る