Flashゲームプログラミング講座 for ActionScript3.0

 

Array クラスとは?

 


■Array クラスについて


Array クラスは、配列用のクラスです。
 
Array クラスには、以下の特長があります。
 
■どんな番地にもアクセス可能
 
通常は、0 番地から順番にデータを格納します
 
マイナスの番地や、配列のサイズより大きい番地へも格納することが可能です。
 
特殊な使い方をしない限り、マイナスの番地にはデータを格納しない方がいいでしょう。
 
■配列の挿入や除去などの操作が可能
 
Array クラスのメソッドを使用すると、配列を割り込み挿入したり、部分切除することができます。
 
データを格納してから、挿入や切除などの操作を行うと、番地が変動する事があります。
 
2 番地に格納したからといって、常に 2 番地に存在し続けるとは限りません。
 
■どんな型のデータでも格納可能
 
格納するデータの型に決まりはありません。どんな型のデータでも格納する事ができます
 
格納するデータの型を指定したい場合は、Vector クラスを使用します。
 
 

 

配列を作成する

 
 


■Array オブジェクトを作成する

 
配列を作成するには、new 演算子を使って、Array クラスをインスタンス化します。
 
第01引数に、数値を指定すると、配列の初期サイズを指定することができます。
 
初期サイズは、仮想的な値です。実際に内部で領域が確保される事はありません
 
new Array ( 初期の配列のサイズ ) :Array
第01引数(略可)uint初期の配列のサイズを指定。デフォルトは 0
戻り値 ArrayArray オブジェクト
 
Array オブジェクトを作成する

// Array オブジェクトを作成する
var array : Array = new Array();
 
初期サイズを指定して、Array オブジェクトを作成する

// 初期サイズを指定して、Array オブジェクトを作成する
var array : Array = new Array(1024);
 

■初期データを格納しつつ Array オブジェクトを作成する


■配列リテラルを使用する
 
角括弧 [ ] の中に、カンマ , で区切って、データを順番に指定します。
 
この書式を、配列リテラルといいます。
 
初期データを格納しつつ Array オブジェクトを作成する

// 初期データを格納しつつ Array オブジェクトを作成する
var array : Array = ["A" , "B" , "C" , 123 , 456 , true , false];
 
空の配列を作成する

// 空の配列を作成する
var array : Array = [ ];
 
■Array クラスを使用する(非推奨)
 
new 演算子を使って、Array クラスをインスタンス化します。
 
可変引数となっているので、格納したいデータを順番に指定します。
 
第01引数に数値だけ指定した場合、配列の初期サイズの設定となるので注意します。
 
この仕様はバグを誘発しやすいため、配列リテラルを使用した方がいいでしょう。
 
new Array ( 格納したいデータ , ... ) :Array
第01引数 *0 番地に格納したいデータを指定。(第01引数に数値だけ指定すると配列の初期サイズの設定となる)
可変引数(略可)*1 番地から格納したいデータを順番に指定。
戻り値 ArrayArray オブジェクト
 
初期データを格納しつつ Array オブジェクトを作成する

// 初期データを格納しつつ Array オブジェクトを作成する
var array : Array = new Array("A","B","C","D","E");
 
第01引数に数値だけ指定した場合は、動作が異なるので注意

// ------------------------------------------------------------
// ○ 初期データを格納しつつ Array オブジェクトを作成する
// ------------------------------------------------------------
var array0 : Array = new Array(5,6,7);

// 出力テスト
trace(array0); // 5,6,7

// ------------------------------------------------------------
// × 初期サイズを指定して、Array オブジェクトを作成する
// ------------------------------------------------------------
var array1 : Array = new Array(5);

// 出力テスト
trace(array1); // undefined,undefined,undefined,undefined,undefined
 

■配列の任意の番地にアクセスする

 
配列の任意の番地にアクセスするには、配列アクセス演算子を使用します。
 
角括弧 [ ] の中に、アクセスしたい番地を数値で指定します。
 
指定した番地にデータが存在しない場合は、undefined 値が得られます。
 
配列の任意の番地にアクセスする

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var array : Array = ["A","B","C","D","E","F"];


// ------------------------------------------------------------
// 配列の任意の番地に、読み取りアクセスする
// ------------------------------------------------------------
// 0 番地に格納されたデータを取得
var v0 :String = array[0];

// 2 番地に格納されたデータを取得
var v1 :String = array[2];

// 出力テスト
trace(v0); // "A"
trace(v1); // "C"


// ------------------------------------------------------------
// 配列の任意の番地に、書き込みアクセスする
// ------------------------------------------------------------
// 2 番地にデータを格納する
array[2] = "G";

// 5 番地にデータを格納する
array[5] = "H";

// 出力テスト
trace(array); // "A", "B", "G", "D", "E", "H"


 

■配列のすべての番地に順番にアクセスする


■ 0 から順番にアクセスする
 
配列のサイズを取得するには、length プロパティを使用します。
 
for 文を使って、0 から順番にアクセスします。
 
0 から順番に、すべての番地のデータにアクセスする

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var array:Array = ["A","B","C","D","E","F"];

// ------------------------------------------------------------
// 0 から順番に、すべての番地のデータにアクセスする
// ------------------------------------------------------------
var i:uint;
var num:uint = array.length;
for(i=0;i < num;i++){
	trace("---");
	trace("index:" + i);
	trace("data:"  + array[i]);
}
 
■ for..in 文を使用する
 
for..in 文を使って、アクセスする例です。
 
プロパティ名を取得できるので、配列アクセス演算子を使ってデータにアクセスします。
 
for..in 文を使用して、すべての番地のデータにアクセスする

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var array:Array = ["A","B","C","D","E","F"];

// ------------------------------------------------------------
// for..in 文を使用して、すべての番地のデータにアクセスする
// ------------------------------------------------------------
var key:String;
for (key in array){
	trace("---");
	trace("index:" + key);
	trace("data:"  + array[key]);
}
 
Array オブジェクトを、連想配列として取り扱っている場合は、for..in 文を使用します。
 
得られる番地の順序は、昇順とは限りません。
 
for..in 文を使用して、すべての番地のデータにアクセスする

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var array:Array = new Array();

// ------------------------------------------------------------
// 数値を使ってアクセスする連想配列として取り扱う
// ------------------------------------------------------------
array[-12] = "A";
array[123] = "B";
array[456] = "C";
array[987] = "D";

// ------------------------------------------------------------
// for..in 文を使用して、すべての番地のデータにアクセスする
// ------------------------------------------------------------
var key:String;
for (key in array){
	trace("---");
	trace("index:" + key);
	trace("data:"  + array[key]);
}
 
■ for each..in 文を使用する
 
for each..in 文を使って、アクセスする例です。
 
データを直接取得することができます。
 
for each..in 文を使用して、すべての番地のデータにアクセスする

// 配列を作成する
var array:Array = ["A","B","C","D","E","F"];

// for each..in 文を使用して、すべての番地のデータにアクセスする
var data:*;
for each (data in array){
	trace("data:" + data);
}
 

■配列の任意の番地を削除する

 
配列の任意の番地を削除するには、delete 文を使用します。
 
Array オブジェクトを、連想配列として取り扱っている場合に使用するといいでしょう。
 
配列の任意の番地を削除する

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var array : Array = ["A","B","C","D","E","F"];


// ------------------------------------------------------------
// 配列の任意の番地を削除する
// ------------------------------------------------------------
// 1 番地を削除する
delete array[1];

// 3 番地を削除する
delete array[3];

// ------------------------------------------------------------
// 残っている番地をすべて出力する
// ------------------------------------------------------------
var key:String;
for (key in array){
	trace("---");
	trace("index:" + key);
	trace("data:"  + array[key]);
}
 


 

多次元配列を作成する

 


■多次元配列を作成する

 
■多次元配列を作成するには?
 
Array クラスは、1次元用の配列です。
 
Array オブジェクト1つだけで、多次元配列を実現することはできません。
 
1次元配列の各番地に、必要な数だけ Array オブジェクトを作成して格納します。
 
例えば、「3行×無限列」となる、2次元配列を作成する例です。
 
2次元配列化するには、1次元配列の各番地に Array オブジェクトを作成して格納する

// 1次元配列を作成する
var array : Array = new Array();

// 1次元配列の各番地に、配列を作成して格納する
array[0] = new Array();
array[1] = new Array();
array[2] = new Array();
 
■多次元配列を初期化する
 
「10行×無限列」の二次元配列を作成して、「10行×20列」の空間を中身を 0 で埋める例です。
 
10行×無限列」の二次元配列を作成して、「10行×20列」の空間を中身を 0 で埋める

var i:int;
var j:int;

// 1次元配列を作成する
var array : Array = new Array();

for(i=0;i < 10;i++){

	// 1次元配列の各番地に、配列を作成して格納する
	array[i] = new Array();

	for(j=0;j < 20;j++){

		// 0 で埋める
		array[i][j] = 0;
	}
}
 
多次元配列の初期化は、配列リテラルで記述すると、視覚的に見やすくなります。
 
配列リテラルを使って二次元配列を作成する

var array : Array = [
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
	[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
];
 
配列リテラルを使って複雑な多次元配列を作成する

var array : Array = [
	[
		["A","B","C"],
		["D","E","F"],
		["G","H","I"]
	],[
		["J","K","L","M"],
		["N","O","P","Q","R"]
	],[
		[
			["S","T","U"],
			["V","W"]
		],[
			["X"],
			["Y"],
			["Z"]
		]
	]
];
 
■多次元配列の任意の番地にアクセスする
 
多次元配列の任意の番地にアクセスするには、配列アクセス演算子を使用します。
 
角括弧 [ ] の中に、アクセスしたい番地を数値で指定します。
 
「3行×無限列」の2次元配列にアクセスする

// ------------------------------------------------------------
// 「3行×無限列」の2次元配列を作成する
// ------------------------------------------------------------
// 1次元配列を作成する
var array : Array = new Array();

// 1次元配列の各番地に、配列を作成して格納する
array[0] = new Array();
array[1] = new Array();
array[2] = new Array();


// ------------------------------------------------------------
// 配列の任意の番地に、書き込みアクセスする
// ------------------------------------------------------------
// 0 行 5 列番地にデータを格納する
array[0][5] = "A";

// 2 行 3 列番地にデータを格納する
array[2][3] = "B";


// ------------------------------------------------------------
// 配列の任意の番地に、読み取りアクセスする
// ------------------------------------------------------------
// 0 行 5 列番地に格納されたデータを取得
var v0:String = array[0][5];

// 出力テスト
trace(v0); // "A"

// 2 行 3 列番地に格納されたデータを取得
var v1:String = array[2][3];

// 出力テスト
trace(v1); // "B"


// ------------------------------------------------------------
// アクセス範囲テスト
// ------------------------------------------------------------
// × 3 行 0 列番地にデータを格納する (幹の番地は用意した範囲までしかアクセスできない)
//array[3][0] = "C";

// ○ 0 行 99999 列番地にデータを格納する (末端の番地は無制限にアクセスできる)
//array[0][99999] = "D";
 


 

Array クラスのプロパティについて

 


■Array クラスのプロパティ


Array クラスには、以下のプロパティがあります。
 
プロパティ 説明
length uint 配列のサイズ
 
 


■length プロパティ


配列のサイズを取得するには、length プロパティを使用します。
 
配列のサイズを調べる

// Array オブジェクトを作成する
var array:Array = [0,1,2,3,4];

// 配列のサイズを取得
var num:uint = array.length;

// 出力テスト
trace(num);
 
Array オブジェクトを、連想配列として取り扱っている場合は注意します。
 
length プロパティは、格納したデータの総数ではありません。
 
Array オブジェクトを、連想配列として取り扱っている場合は注意

// 配列を作成する
var array:Array = new Array();

// Object 型のプロパティのように、好きな番地にアクセスする
array[-12] = "A";
array[123] = "B";
array[456] = "C";
array[987] = "D";

// 出力テスト (結果:988)
trace("length:" + array.length);
 


 

Array クラスのメソッドについて

 


■Array クラスのメソッド一覧


Array クラスには、以下のメソッドがあります。
 
メソッド 説明
concat() 2つ以上の配列を繋げて、新しい配列を取得する。
unshift() 配列の最先頭に複数のデータを追加して、新しいサイズを取得する。
push() 配列の最後尾に複数のデータを追加して、新しいサイズを取得する。
shift() 配列の最先頭を削除して、格納されていたデータを取得する。
pop() 配列の最後尾を削除して、格納されていたデータを取得する。
slice() 配列の X 番目から Y 番目までを、新しい配列として取得する。
splice() 配列の X 番目から L 個分を削除して、新しい配列として取得する。
配列の X 番目から複数のデータを追加する。
sort() 配列をソートする。
sortOn() 配列をソートする。(データがオブジェクトの場合)
reverse() 配列の順番を反転する。
join() 配列の各データの間に任意の文字列を挟み、すべて繋げたストリングを取得する。
indexOf() 配列の前から後へデータを検索し、一致した位置を取得する。
lastIndexOf() 配列の後から前へデータを検索し、一致した位置を取得する。
forEach() 関数を使用して、データを順番に調べる。(すべての番地のデータにアクセスする)
every() 関数を使用して、データを順番に検証する(すべてのデータが真である)
some() 関数を使用して、データを順番に検証する(1つでも真となるデータが存在する)
filter() 関数を使用して、新しい配列を取得する。(データの抽出用)
map() 関数を使用して、新しい配列を取得する。(データの変換用)
 
 


■concat() メソッド

 
2つ以上の配列を繋げて、新しい配列を取得するには、concat() メソッドを使用します。
 
Array.concat( Array ... ) :Array
可変引数 Array連結したい配列を指定。引数の最先頭から最後尾の順番で結合される。
戻り値 Array新しい配列
 
2つの配列を連結して、新しい配列を取得する。

// 配列を作成する
var a:Array = ["A","B","C"];
var b:Array = ["D","E","F"];

// 2つの配列を連結して新しい配列を取得する
var c:Array = a.concat(b);
 
 
4つの配列を連結して、新しい配列を取得する。

// 配列を作成する
var a:Array = ["A","B"];
var b:Array = ["C","D"];
var c:Array = ["E","F","G"];
var d:Array = ["H"];

// 複数の配列を連結して新しい配列を取得する
var e:Array = a.concat(b,c,d);
 
 

■unshift() メソッド

 
配列の最先頭に複数のデータを追加して、新しいサイズを取得するには、unshift() メソッドを使用します。
 
Array.unshift( * ... ) :uint
可変引数 *追加したいデータを指定。引数の最先頭から最後尾の順番で追加される。
戻り値 uintデータ追加後のサイズ
 
配列の先頭に "D" を追加して、新しいサイズを取得する

// 配列を作成する
var a:Array = ["A","B","C"];

// 配列の先頭にデータを追加して、新しいサイズを取得する
var num:uint = a.unshift("D");
 
 
配列の先頭に "D","E","F" を追加して、新しいサイズを取得する

// 配列を作成する
var a:Array = ["A","B","C"];

// 配列の先頭に複数のデータを追加して、新しいサイズを取得する
var num:uint = a.unshift("D" ,"E" ,"F");
 
 

■push() メソッド

 
配列の最後尾に複数のデータを追加して、新しいサイズを取得するには、push() メソッドを使用します。
 
Array.push( * ... ) :uint
可変引数 *追加したいデータを指定。引数の最先頭から最後尾の順番で追加される。
戻り値 uintデータ追加後のサイズ
 
配列の最後尾に "D" を追加して、新しいサイズを取得する。

// 配列を作成する
var a:Array = ["A","B","C"];

// 配列の最後尾にデータを追加して、新しいサイズを取得する
var num:uint = a.push("D");
 
 
配列の最後尾に "D","E","F" を追加して、新しいサイズを取得する。

// 配列を作成する
var a:Array = ["A","B","C"];

// 配列の最後尾に複数のデータを追加して、新しいサイズを取得する
var num:uint = a.push("D" ,"E" ,"F");
 
 

■shift() メソッド

 
配列の最先頭を削除して、格納されていたデータを取得するには、shift() メソッドを使用します。
 
Array.shift() :*
引数 voidなし
戻り値 *配列の先頭に格納されていたデータ
 
配列の先頭を削除して、格納されていたデータを取得する。

// 配列を作成する
var a:Array = ["A","B","C","D","E"];

// 配列の最先頭を削除して、格納されていたデータを取得する
var b:* = a.shift();
 
 

■pop() メソッド

 
配列の最後尾を削除して、格納されていたデータを取得するには、pop() メソッドを使用します。
 
Array.pop() :*
引数 voidなし
戻り値 *配列の最後尾に格納されていたデータ
 
配列の最後尾を削除して、格納されていたデータを取得する。

// 配列を作成する
var a:Array = ["A","B","C","D"];

// 配列の最後尾を削除して、格納されていたデータを取得する
var b:* = a.pop();
 
 

■slice() メソッド

 
配列の開始位置と終了位置を指定して、新しい配列を取得するには、slice() メソッドを使用します。
 
第02引数で指定する終了位置は、取得対象に含まれません。
 
引数を省略した場合、配列全体の複製となります。
 
Array.slice( 開始位置 , 終了位置 ) :Array
第01引数(略可)int開始位置を指定。(0 から始まる番号)デフォルトは 0
第02引数(略可)int終了位置を指定。(0 から始まる番号)デフォルトは 16777215
マイナス値を指定すると「length + 第02引数」 の位置。(-1で最後尾は含まれない)
戻り値 Array新しい配列
 
配列を複製する

// 配列を作成する
var a:Array = ["A","B","C"];

// 配列を複製する
var b:Array = a.slice();
 
 
配列の 1 番目から 4 番目を、新しい配列として取得する

// 配列を作成する
var a:Array = ["A","B","C","D","E","F"];

// 開始位置と終了位置を指定して、新しい配列を取得する
var b:Array = a.slice(1, 5);
 
 

■splice() メソッド

 
指定した位置から、配列の削除と追加を行うには、splice() メソッドを使用します。
 
開始位置と個数を指定して、配列を削除する事ができます。
 
削除した範囲は、新しい配列として取得することができます。
 
特に削除しない場合は、第02引数に 0 を指定します。
 
開始位置から、新しいデータを追加することができます。
 
特にデータを追加しない場合は、第03引数以降を省略します。
 
Array.splice( 開始位置 , 削除する個数 , * ... ) :Array
第01引数(略可)int開始位置を指定。(0 から始まる番号)デフォルトは 0
第02引数(略可)uint削除する個数を指定。デフォルトは 4294967295
可変引数(略可)*追加したいデータを指定。第03引数から最後尾の順番で追加される。
戻り値 Array削除した範囲を新しい配列として返す
 
配列の 3 番目から 2 個分を削除して、新しい配列として取得する。

// 配列を作成する
var a:Array = ["A","B","C","D","E","F"];

// 開始位置と個数を指定して配列を削除し、削除した範囲は新しい配列として取得する
var b:Array = a.splice(3,2);
 
 
配列の 1 番目に、"G" を追加する。

// 配列を作成する
var a:Array = ["A","B","C","D","E","F"];

// 開始位置を指定し、データを追加する(第02引数に 0 を指定)
var b:Array = a.splice(1,0,"G");
 
 
配列の 1 番目から 4 個分を削除して、新しい配列として追加する。配列の 1 番目から "G","H","I" を追加する。

// 配列を作成する
var a:Array = ["A","B","C","D","E","F"];

// 指定した位置から、配列の削除と追加を行う
var b:Array = a.splice(1,4,"G","H","I");
 
 

■sort() メソッド

 
配列をソートするには、sort() メソッドを使用します。
 
以下の使用方法があります。
 
 

■sort() メソッド (定数を指定)

 
定数を指定して、配列をソートします。
 
Array.sort( Array.* ) :*
第01引数 uintソート用の設定。Array.* 定数を論理和で指定。
戻り値 *通常は、配列の参照を返す。
Array.UNIQUESORT を指定した場合、ソートに失敗すると 0 を返す。
Array.RETURNINDEXEDARRAY を指定した場合、新しい配列を返す。(中身はソート後の番地情報)
 
■第01引数 (ソート用の設定)
 
第01引数に、以下の定数を指定します。(論理和による複数指定が可能
 
プロパティ 数値 説明
Array.CASEINSENSITIVE 0x01 指定すれば、大文字と小文字を区別しません。
指定しなければ、大文字と小文字を区別します。
Array.DESCENDING 0x02 指定すれば、降順でソートします。
指定しなければ昇順でソートします。
Array.NUMERIC 0x10 指定すれば、数値として比較を試みます。
指定しなければ、文字列として比較を試みます。(コードは Unicode)
Array.UNIQUESORT 0x04 すべての番地にユニーク(唯一)なデータが格納されている場合に指定します。
同じデータがある場合ソートは行われません。この場合、戻り値から 0 を取得できます。
Array.RETURNINDEXEDARRAY 0x08 配列に対してソートは行われません。
戻り値から、ソート後の番地情報が格納された新しい配列を取得できます。
 
使用例です。
 
配列をソートする。(数値として比較)

// 配列を作成する
var a:Array = [2,4,1,3,0];

// 配列をソートする(数値として比較)
a.sort(Array.NUMERIC);
 
 
配列をソートする。(文字列として比較)(大文字と小文字を区別する)

// 配列を作成する
var a:Array = ["b","c","C","B","A","a"];

// 配列をソートする(文字列として比較)(大文字と小文字を区別する)
a.sort(0);
 
 
配列をソートする。(数値として比較)(降順)

// 配列を作成する
var a:Array = [2,4,1,3,0];

// 配列をソートする(数値として比較)(降順)
a.sort(Array.NUMERIC | Array.DESCENDING);
 
 
配列のソート後の番地情報を取得する。

// 配列を作成する
var a:Array = ["C","E","B","D","A"];

// 配列のソート後の番地情報を取得する
var b:Array = a.sort(Array.RETURNINDEXEDARRAY);
 
 

■sort() メソッド (コールバック関数を指定)

 
コールバック関数を指定して、配列をソートします。
 
Array.sort( コールバック関数 ) :Array
第01引数 Functionコールバック関数を指定。
戻り値 Array配列の参照。
 
■第01引数 (コールバック関数)
 
コールバック関数の仕様です。
 
第01引数と第02引数から、任意の番地に格納されているデータが取得できます。
 
昇順にソートしたい場合は、
 
(第01引数 < 第02引数) となる場合、負の数 を返します。
 
(第01引数 == 第02引数) となる場合、0 を返します。
 
(第01引数 > 第02引数) となる場合、正の数 を返します。
 
降順にソートしたい場合は、
 
(第01引数 > 第02引数) となる場合、負の数 を返します。
 
(第01引数 == 第02引数) となる場合、0 を返します。
 
(第01引数 < 第02引数) となる場合、正の数 を返します。
 
使用例です。
 
数値として比較し配列をソートする。

// ------------------------------------------------------------
// ソート用コールバック関数(数値として比較)
// ------------------------------------------------------------
function ArraySortNumeric(prev:Number,next:Number):Number{
	return (prev - next);
}


// ------------------------------------------------------------
// 配列をソートする
// ------------------------------------------------------------
// 配列を作成する
var a:Array = [2,4,1,3,0];

// 配列をソートする(数値として比較)
a.sort(ArraySortNumeric);
 
 
文字列として比較し配列をソートする。

// ------------------------------------------------------------
// ソート用コールバック関数(文字列として比較)
// ------------------------------------------------------------
function ArraySortString(prev:String,next:String):Number{
	var i:uint = 0;
	while(true){
		var p:Number = prev.charCodeAt(i) || 0;
		var n:Number = next.charCodeAt(i) || 0;
		var s:Number = p - n;
		if(s) return s;
		if(!p) break;
		i++;
	}
	return 0;
}


// ------------------------------------------------------------
// 配列をソートする
// ------------------------------------------------------------
// 配列を作成する
var a:Array = ["C","E","B","D","A"];

// 配列をソートする(文字列として比較)
a.sort(ArraySortString);
 
 
連番文字列として比較し配列をソートする。

// ------------------------------------------------------------
// ソート用コールバック関数(連番付き文字列として比較)
// ------------------------------------------------------------
function ArraySortSerialNumberString(prev:String,next:String):Number{
	var re:RegExp = new RegExp("^(.*?)([0-9]+)$","i");
	var p:Array = prev.match(re);
	var n:Array = next.match(re);
	if(p && n && (p[1] === n[1])){
		return parseInt(p[2]) - parseInt(n[2]);
	}
	return prev.localeCompare(next);
}


// ------------------------------------------------------------
// 配列をソートする
// ------------------------------------------------------------
// 配列を作成する
var a:Array = ["Ba","A64","B10","B2","A123","A0","A"];

// 配列をソートする(連番付き文字列として比較)
a.sort(ArraySortSerialNumberString);
 
 

■sortOn() メソッド

 
オブジェクトが格納された配列をソートするには、sortOn() メソッドを使用します。
 
このプロパティを使用するには、以下の条件を満たす必要があります。
 
「すべての番地に、オブジェクトが格納されている」
 
「全てのオブジェクトは、同じ名前のプロパティを持っている」
 
ソートの対象とする、任意のプロパティ名を、フィールド名といいます。
 
Array.sortOn( "フィールド名" , Array.* ) :*
第01引数 Stringソートの対象とするフィールド名を指定。
第02引数 uintソート用の設定。Array.* 定数を論理和で指定。
戻り値 *通常は、配列の参照を返す。
Array.UNIQUESORT を指定した場合、ソートに失敗すると 0 を返す。
Array.RETURNINDEXEDARRAY を指定した場合、新しい配列を返す。(中身はソート後の番地情報)
 
■第02引数 (ソート用の設定)
 
第02引数に、以下の定数を指定します。(論理和による複数指定が可能
 
プロパティ 数値 説明
Array.CASEINSENSITIVE 0x01 指定すれば、大文字と小文字を区別しません。
指定しなければ、大文字と小文字を区別します。
Array.DESCENDING 0x02 指定すれば、降順でソートします。
指定しなければ昇順でソートします。
Array.NUMERIC 0x10 指定すれば、数値として比較を試みます。
指定しなければ、文字列として比較を試みます。(コードは Unicode)
Array.UNIQUESORT 0x04 すべての番地にユニーク(唯一)なデータが格納されている場合に指定します。
同じデータがある場合ソートは行われません。この場合、戻り値から 0 を取得できます。
Array.RETURNINDEXEDARRAY 0x08 配列に対してソートは行われません。
戻り値から、ソート後の番地情報が格納された新しい配列を取得できます。
 
■複数のフィールド名を指定する
 
ソート条件として、複数のフィールド名を指定することができます。
 
第01引数と、第02引数で設定するパラメータを、それぞれ配列に格納して指定します
 
使用例です。
 
オブジェクトが格納された配列をソートする。(数値として比較)

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = [
	{ id:2 , name:"CCC" },
	{ id:4 , name:"EEE" },
	{ id:1 , name:"BBB" },
	{ id:3 , name:"DDD" },
	{ id:0 , name:"AAA" }
];

// ------------------------------------------------------------
// オブジェクトが格納された配列をソートする(数値として比較)
// ------------------------------------------------------------
a.sortOn("id",Array.NUMERIC);


// ------------------------------------------------------------
// 結果
// ------------------------------------------------------------
// { id:0 , name:"AAA" }
// { id:1 , name:"BBB" }
// { id:2 , name:"CCC" }
// { id:3 , name:"DDD" }
// { id:4 , name:"EEE" }
 
複数のフィールド名を指定して配列をソートする。

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = [
	{ name:"A" , ext:"bmp" , size:516 },
	{ name:"B" , ext:"png" , size:376 },
	{ name:"C" , ext:"gif" , size:487 },
	{ name:"D" , ext:"bmp" , size:876 },
	{ name:"E" , ext:"png" , size:879 },
	{ name:"F" , ext:"png" , size:963 },
	{ name:"G" , ext:"bmp" , size:107 },
	{ name:"H" , ext:"gif" , size:481 },
	{ name:"I" , ext:"gif" , size:557 },
	{ name:"J" , ext:"png" , size:752 }
];

// ------------------------------------------------------------
// フィールド名の設定
// ------------------------------------------------------------
var field_name:Array = [
	"ext" ,	// 第01フィールド名
	"size"	// 第02フィールド名
];

// ------------------------------------------------------------
// ソート用の設定
// ------------------------------------------------------------
var options:Array = [
	0,			// 第01フィールドのソート設定(文字列として比較)(大文字と小文字を区別する)
	Array.NUMERIC		// 第02フィールドのソート設定(数値として比較)
];

// ------------------------------------------------------------
// オブジェクトが格納された配列をソートする
// ------------------------------------------------------------
a.sortOn(field_name , options);


// ------------------------------------------------------------
// 結果
// ------------------------------------------------------------
// { name:"G" , ext:"bmp" , size:107 }
// { name:"A" , ext:"bmp" , size:516 }
// { name:"D" , ext:"bmp" , size:876 }
// { name:"H" , ext:"gif" , size:481 }
// { name:"C" , ext:"gif" , size:487 }
// { name:"I" , ext:"gif" , size:557 }
// { name:"B" , ext:"png" , size:376 }
// { name:"J" , ext:"png" , size:752 }
// { name:"E" , ext:"png" , size:879 }
// { name:"F" , ext:"png" , size:963 }

 

■reverse() メソッド

 
配列の順序を反転するには、reverse() メソッドを使用します。
 
Array.reverse( ) :Array
引数 voidなし
戻り値 Array配列の参照。
 
配列の順番を反転する。

// 配列を作成する
var a:Array = ["A","B","C","D","E"];

// 配列を反転する
a.reverse();
 
 

■join() メソッド

 
配列の各データの間に任意の文字列を挟み、すべて繋げたストリングを取得するには、join() メソッドを使用します。
 
Array.join( 任意の文字列 ) :String
第01引数 String配列の各データの間に挟む文字列を指定。デフォルトは ","
戻り値 String配列の各データの間に、第01引数で指定した文字列を挟み、すべて繋げたストリング。
 
配列の各データの間に任意の文字列を挟み、すべて繋げたストリングを取得する

// 配列を作成する
var a:Array = [0,1,2,3,4];

// 各データの間に任意の文字列を挟み、すべて繋げたストリングを取得する
var str:String = a.join("-");
 
 
■toString() メソッド
 
配列の各データの間にカンマ『,』を挟み、すべて繋げたストリングを取得するには、toString() メソッドや、toLocaleString() メソッドを使用します。
 
配列の各データの間にカンマを挟み、すべて繋げたストリングを取得する

// 配列を作成する
var a:Array = ["A","B","C","D","E"];

// 各データの間にカンマを挟み、すべて繋げたストリングを取得する
var str:String = a.toString();
 
 

■indexOf() メソッド

 
配列の前から後へデータを検索し、一致した位置を取得するには、indexOf() メソッドを使用します。
 
Array.indexOf( 検索データ , 開始位置 ) :int
第01引数 *検索したいデータを指定
第02引数(略可)int検索を開始する位置を指定。(0 から始まる番号)デフォルトは 0。
マイナス値を指定すると「length + 第02引数」 の位置。(-1 で最後尾)
戻り値 int第01引数で指定したデータと厳密な等価(===)で一致した位置。存在しない場合は -1。
 
配列の前から後へデータを検索し、一致した位置を取得する。

// 配列を作成する
var a:Array = ["A","B","C","D","E","A","B","C"];

// 配列の前から後へデータを検索し、一致した位置を取得する
var pos:int = a.indexOf("B",0);

// 検索結果
if(pos >= 0){
	trace("検索結果:" + pos);
}else{
	trace("見つからない");
}
 

■lastIndexOf() メソッド

 
配列の後から前へデータを検索し、一致した位置を取得するには、lastIndexOf() メソッドを使用します。
 
Array.lastIndexOf( 検索データ , 開始位置 ) :int
第01引数 *検索したいデータを指定
第02引数(略可)int検索を開始する位置を指定。(0 から始まる番号)デフォルトは 0x7fffffff。
マイナス値を指定すると「length + 第02引数」の位置。(-1 で最後尾)
戻り値 int第01引数で指定したデータと厳密な等価(===)で一致した位置。存在しない場合は -1。
 
配列の後から前へデータを検索し、一致した位置を取得する。

// 配列を作成する
var a:Array = ["A","B","C","D","E","A","B","C"];

// 配列の後から前へデータを検索し、一致した位置を取得する
var pos:int = a.lastIndexOf("B",-1);

// 検索結果
if(pos >= 0){
	trace("検索結果:" + pos);
}else{
	trace("見つからない");
}
 

■関数を使用して、データを順番に調べる(すべての番地のデータにアクセスする)

 
forEach() メソッドを使用します。
 
Array.forEach( コールバック関数 , thisのアクセス先 ) :void
第01引数 Functionコールバック関数を指定
第02引数(略可)*コールバック関数内で this のアクセス先となるオブジェクトを指定。デフォルトは null
戻り値 voidなし
 
■第01引数 (コールバック関数)
 
第01引数から、データを取得できます。
 
第02引数から、番地を取得できます。
 
第03引数から、配列の参照が取得できます。
 
戻り値はありません。
 
■使用例
 
コールバック関数を使用して、データを順番に調べる。

// ------------------------------------------------------------
// コールバック関数
// ------------------------------------------------------------
function ArrayForEachFunc(item:*,index:int,array:Array):void{
	trace("---");
	trace("index:" + index);
	trace("data:" + item);
	trace("this:" + this);
}

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = ["A","B","C","D","E"];

// ------------------------------------------------------------
// データを順番に調べる
// ------------------------------------------------------------
a.forEach(ArrayForEachFunc);
 
コールバック関数を使用して、データを順番に調べる。

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = [ "aaa" , "bbb" , "ccc" , "ddd" , "eee" ];

// ------------------------------------------------------------
// データを順番に調べる
// ------------------------------------------------------------
a.forEach(function (item:*,index:int,array:Array):void{

	trace("---");
	trace("index:" + index);
	trace("data:" + item);
	trace("this:" + this);

},stage);
 

■関数を使用して、データを順番に検証する(すべてのデータが真である)

 
every() メソッドを使用します。
 
Array.every( コールバック関数 , thisのアクセス先 ) :Boolean
第01引数 Functionコールバック関数を指定
第02引数(略可)*コールバック関数内で this のアクセス先となるオブジェクトを指定。デフォルトは null
戻り値 Booleanすべてのデータが真であるなら true
1つでも偽となるデータが存在するなら false
 
■第01引数 (コールバック関数)
 
第01引数から、データを取得できます。
 
第02引数から、番地を取得できます。
 
第03引数から、配列の参照が取得できます。
 
データを検証した結果が偽だった場合は、false 値を返します。
 
この場合、every() メソッドは、その時点で終了します。
 
次のデータを、継続して検証したい場合は、true 値を返します。
 
■使用例
 
すべてのデータが真であるか検証する

// ------------------------------------------------------------
// コールバック関数
// ------------------------------------------------------------
function ArrayEveryFunc(item:*,index:int,array:Array):Boolean{

	trace("---");
	trace("index:" + index);
	trace("data:" + item);
	trace("this:" + this);

	// 何らかのチェック
	if(false){
		// 検証処理を終了する
		return false;
	}

	// 検証処理を継続する
	return true;
}

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = ["A","B","C","D","E"];

// ------------------------------------------------------------
// すべてのデータが真であるか検証する
// ------------------------------------------------------------
var result:Boolean = a.every(ArrayEveryFunc);
 
配列内のデータが、すべてプラス値であるか調べる

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = [ 111 , 222 , 333 , -444 , 555 ];

// ------------------------------------------------------------
// 配列内のデータが、すべてプラス値であるか調べる
// ------------------------------------------------------------
var result:Boolean = a.every(function (item:*,index:int,array:Array):Boolean{

	// マイナスのデータが見つかった
	if(item < 0){

		// 検証処理を終了する
		return false;
	}

	// 検証処理を継続する
	return true;
});

// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(result); // false
 

■関数を使用して、データを順番に検証する(1つでも真となるデータが存在する)

 
some() メソッドを使用します。
 
Array.some( コールバック関数 , thisのアクセス先 ) :Boolean
第01引数 Functionコールバック関数を指定
第02引数(略可)*コールバック関数内で this のアクセス先となるオブジェクトを指定。デフォルトは null
戻り値 Boolean1つでも真となるデータが存在するなら true
すべてのデータが偽であるなら false
 
■第01引数 (コールバック関数)
 
第01引数から、データを取得できます。
 
第02引数から、番地を取得できます。
 
第03引数から、配列の参照が取得できます。
 
データを検証した結果が真だった場合は、true 値を返します。
 
この場合、some() メソッドは、その時点で終了します。
 
次のデータを、継続して検証したい場合は、false 値を返します。
 
■使用例
 
1つでも真となるデータが存在するか検証する

// ------------------------------------------------------------
// コールバック関数
// ------------------------------------------------------------
function ArraySomeFunc(item:*,index:int,array:Array):Boolean{

	trace("---");
	trace("index:" + index);
	trace("data:" + item);
	trace("this:" + this);

	// 何らかのチェック
	if(false){
		// 検証処理を終了する
		return true;
	}

	// 検証処理を継続する
	return false;
}

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = ["A","B","C","D","E"];

// ------------------------------------------------------------
// 1つでも真となるデータが存在するか検証する
// ------------------------------------------------------------
var result:Boolean = a.some(ArraySomeFunc);
 
配列内のデータに、マイナス値が1つでも含まれるか調べる

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = [ 111 , 222 , -333 , 444 , 555 ];

// ------------------------------------------------------------
// 配列内のデータに、マイナス値が1つでも含まれるか調べる
// ------------------------------------------------------------
var result:Boolean = a.some(function (item:*,index:int,array:Array):Boolean{

	// マイナスのデータが見つかった
	if(item < 0){

		// 検証処理を終了する
		return true;
	}

	// 検証処理を継続する
	return false;
});

// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(result); // true
 

■関数を使用して、新しい配列を取得する(データの抽出用)

 
filter() メソッドを使用します。
 
Array.filter( コールバック関数 , thisのアクセス先 ) :Array
第01引数 Functionコールバック関数を指定
第02引数(略可)*コールバック関数内で this のアクセス先となるオブジェクトを指定。デフォルトは null
戻り値 Arrayコールバック関数で抽出した結果が、新しい配列として得られる
 
■第01引数 (コールバック関数)
 
第01引数から、データを取得できます。
 
第02引数から、番地を取得できます。
 
第03引数から、配列の参照が取得できます。
 
現在の要素を、結果に含めたい場合は、true 値を返します。
 
現在の要素を、結果に含めたくない場合は、false 値を返します。
 
filter() メソッドを中断する方法はありません。
 
■使用例
 
コールバック関数を使用して、データを順番に調べる。

// ------------------------------------------------------------
// コールバック関数
// ------------------------------------------------------------
function ArrayFilterFunc(item:*,index:int,array:Array):Boolean{

	trace("---");
	trace("index:" + index);
	trace("data:" + item);
	trace("this:" + this);

	// 何らかのチェック
	if(true){
		// データを抽出対象に含める
		return true;
	}

	// データを抽出対象に含めない
	return false;
}


// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = ["A","B","C","D","E"];

// ------------------------------------------------------------
// データを抽出し、新しい配列を取得する
// ------------------------------------------------------------
var b:Array = a.filter(ArrayFilterFunc);
 
正数となるデータのみを抽出して、新しい配列を得る

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = [ 111 , 222 , -333 , 444 , -555];

// ------------------------------------------------------------
// 正数となるデータのみを抽出して、新しい配列を得る
// ------------------------------------------------------------
var b:Array = a.filter(function (item:*,index:int,array:Array):Boolean{

	// 正数であるか
	return (item > 0);
});

// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(b); // [ 111 , 222 , 444 ]
 

■関数を使用して、新しい配列を取得する(データの変換用)

 
map() メソッドを使用します。
 
配列内のデータを、別のデータに変換することができます。
 
元の型から、別の型に変更することもできます。
 
Array.map( コールバック関数 , thisのアクセス先 ) :Array
第01引数 Functionコールバック関数を指定
第02引数(略可)*コールバック関数内で this のアクセス先となるオブジェクトを指定。デフォルトは null
戻り値 Arrayコールバック関数で変換した結果が、新しい配列として得られる
 
■第01引数 (コールバック関数)
 
第01引数から、データを取得できます。
 
第02引数から、番地を取得できます。
 
第03引数から、配列の参照が取得できます。
 
戻り値から、変換後のデータを返します。
 
■使用例
 
コールバック関数を使用して、データを変換する。

// ------------------------------------------------------------
// コールバック関数
// ------------------------------------------------------------
function ArrayMapFunc(item:*,index:int,array:Array):*{

	trace("---");
	trace("index:" + index);
	trace("data:" + item);
	trace("this:" + this);

	// 変換後のデータを返す
	return (index);
}

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = ["A","B","C","D","E"];

// ------------------------------------------------------------
// データを変換し、新しい配列を取得する
// ------------------------------------------------------------
var b:Array = a.map(ArrayMapFunc);
 
文字列を小文字に変換する

// ------------------------------------------------------------
// 配列を作成する
// ------------------------------------------------------------
var a:Array = ["A","B","C","D","E"];

// ------------------------------------------------------------
// データを変換し、新しい配列を取得する
// ------------------------------------------------------------
var b:Array = a.map(function (item:*,index:int,array:Array):String{

	// 小文字に変換
	var lower:String = item.toLocaleLowerCase();

	// 変換後のデータを返す
	return lower;
});

// ------------------------------------------------------------
// 出力テスト
// ------------------------------------------------------------
trace(b); // [ "a" , "b" , "c" , "d" , "e" ]
 
 
 

 

Array クラスのデータ管理について

 
 


■Array オブジェクトを連想配列として使用する

 
Array クラスは、配列用のクラスですが、以下の特長があります。
 
初期サイズを指定して Array オブジェクト作成しても、実際にメモリ領域が確保されることはありません。
 
現在のサイズを無視して、マイナスの番地や、大きい番地へも格納することが可能です。
 
これらの特長から、Array オブジェクトの実態は、数値を使ってアクセスできる連想配列と言えます。
 
ユニーク(唯一)な数値をキーにして、データを管理する事ができます。
 
■連想配列として使用する場合の注意点
 
Array オブジェクトを連想配列として取り扱う場合、メソッドが利用できないので注意して下さい。
 
length プロパティも機能しません。
 
要素の総数を管理したい場合は、自前で要素数をカウントする必要があります。
 

■Array オブジェクトを辞書として使用する

 
Array オブジェクトの実態は、数値を使ってアクセスできる連想配列です。
 
よって Array オブジェクトは、数値をキーとした辞書として取り扱う事ができます。
 
ActionScript 3.0 では、辞書機能に特化した、Dictionary クラスもあります。
 
■辞書として取り扱う理由
 
Array オブジェクトは、内部でハッシュテーブルを使った高速化が実現されています
 
数値をキーとして指定することで、該当するデータを高速で検索する事ができます。
 
また、すべてのデータの中から該当するデータが存在しない事を、高速で判別する事もできます。
 
データの総数が、100 万以上ある場合でも、瞬時に検索できます。
 
■辞書として管理するためには?
 
データごとに、ユニーク(唯一)な数値が、存在している必要があります。
 
例えば、以下の様なユーザー情報は、辞書として管理することができます。
 
辞書として管理するためには、データごとにユニークな識別値が必要

var user_a:Object = { id:1000000, name:"太郎", age:18 };
var user_b:Object = { id:1000001, name:"花子", age:16 };
var user_c:Object = { id:1000002, name:"圭佑", age:32 };
var user_x:Object = { id:9999997, name:"××", age:99 };
var user_y:Object = { id:9999998, name:"××", age:99 };
var user_z:Object = { id:9999999, name:"××", age:99 };
 
■辞書を作成する
 
辞書として取り扱うための、Array オブジェクトを 1 つ作成します。
 
辞書用 Array オブジェクトを作成する

// 辞書を作成
var dictionary:Array = new Array();
 
■辞書に既にデータが存在するか調べる
 
指定した番地に、すでにデータが存在するか調べます。
 
配列アクセス演算子を使って、調べたい番地にアクセスします。
 
結果が、真であればデータが存在します。偽であればデータは存在しません。
 
辞書に既にデータが存在するか調べる

// 辞書を作成
var dictionary:Array = new Array();

// 検索したい ID 情報
var id:int = 1000001;

// 辞書に既にデータが存在するか調べる
if(dictionary[id]){

	trace("データは存在する");

}else{

	trace("データは存在しない");

}
 
■辞書にデータを登録する
 
任意の番地に、データを登録します。
 
配列アクセス演算子を使って、任意の番地にデータを格納します。
 
辞書にデータを登録する

// 辞書を作成
var dictionary:Array = new Array();

// 管理したいデータ
var user_b:Object = { id:1000001, name:"花子", age:16 };

// 辞書にデータが存在しないか調べる
if(!dictionary[user_b.id]){

	// 辞書に新しいデータを登録する
	dictionary[user_b.id] = user_b;

}
 
■辞書からデータを取得する
 
任意の番地から、データを取得します。
 
配列アクセス演算子を使って、任意の番地からデータを取得します。
 
null 値が得られる場合、データは存在しません。
 
辞書からデータを取得する

// 辞書を作成
var dictionary:Array = new Array();

// 管理したいデータ
var user_a:Object = { id:1000000, name:"太郎", age:18 };
var user_b:Object = { id:1000001, name:"花子", age:16 };
var user_c:Object = { id:1000002, name:"圭佑", age:32 };

// 辞書にデータを登録する
dictionary[user_a.id] = user_a;
dictionary[user_b.id] = user_b;
dictionary[user_c.id] = user_c;

// 検索したい ID 情報
var id:int = 1000000;

// 辞書からデータを取得する
var user:Object = dictionary[id];
 
■辞書に登録したデータを削除する
 
任意の番地から、データを削除します。
 
delete 文を使って、任意の番地を削除します。
 
辞書に登録したデータを削除する

// 辞書を作成
var dictionary:Array = new Array();

// 管理したいデータ
var user_a:Object = { id:1000000, name:"太郎", age:18 };
var user_b:Object = { id:1000001, name:"花子", age:16 };
var user_c:Object = { id:1000002, name:"圭佑", age:32 };

// 辞書にデータを登録する
dictionary[user_a.id] = user_a;
dictionary[user_b.id] = user_b;
dictionary[user_c.id] = user_c;

// 検索したい ID 情報
var id:int = 1000000;

// 辞書からデータを取得する
var user:Object = dictionary[id];
if(user){
	// 辞書に登録したデータを削除する
	delete dictionary[user.id];
}
 

■Array オブジェクトをスタックとして使用する

 
■スタックとは?
 
スタックは、複数のデータを格納する為のデータ構造の1つです。
 
後に格納した物ほど、先に取り出すことができます。(後入れ先出し、先入れ後出し)
 
このアルゴリズムは、本やCDの平積みと同等です。
 
データを追加したい場合は、一番上にさらに積む事で実現できます。
 
データを取り出したい場合は、一番上に積まれた物を取る事で実現できます。
 
■スタックを実現するためには?
 
スタックを実現するためには、push()pop() メソッドを使用します。
 
shift()、unshift() メソッドでも実現できますが、使用すべきではありません。
 
shift()、unshift() メソッドは、配列の最先頭を変更します。
 
メソッドを実行するたびに、配列のすべての要素に対して、番地の割振り直しが発生します。
 
要素数が多ければ多いほど、処理量が増えていくので注意して下さい。
 
■スタックを作成する
 
スタックとして取り扱うための、Array オブジェクトを 1 つ作成します。
 
スタック用 Array オブジェクトを作成する

// スタックを作成
var stack:Array = new Array();
 
■スタックにデータを追加する
 
スタックにデータを追加するには、push() メソッドを使用します。
 
スタックにデータを追加する

// スタックを作成
var stack:Array = new Array();

// スタックにデータを追加する
stack.push( {message:"テスト1"} );
stack.push( {message:"テスト2"} );
stack.push( {message:"テスト3"} );
 
■スタックからデータを取り出す
 
スタックからデータを取り出すには、pop() メソッドを使用します。
 
スタックからデータを取り出す

// スタックを作成
var stack:Array = new Array();

// スタックにデータを追加する
stack.push( {message:"テスト1"} );
stack.push( {message:"テスト2"} );
stack.push( {message:"テスト3"} );

// スタックからデータを取り出す
var a:Object = stack.pop();
var b:Object = stack.pop();
var c:Object = stack.pop();

// 出力テスト
trace(a.message);
trace(b.message);
trace(c.message);
 

■Array オブジェクトをキューとして使用する

 
■キューとは?
 
キューは、複数のデータを格納する為のデータ構造の1つです。
 
先に格納した物ほど、先に取り出すことができます。(先入れ先出し、後入れ後出し)
 
このアルゴリズムは、待ち行列と同等です。
 
データを追加したい場合は、行列の最後尾に並ぶ事で実現できます。
 
データを取り出したい場合は、行列の先頭にいる人から消化される事で実現できます。
 
■キューを実現するためには?
 
push()、shift() メソッド」、もしくは「unshift()、pop() メソッド」を組み合わせで実現できます。
 
shift()、unshift() メソッドは、配列の最先頭を変更します。
 
メソッドを実行するたびに、配列のすべての要素に対して、番地の割振り直しが発生します。
 
要素数が多ければ多いほど、処理量が増えていくので注意して下さい。
 
データの総数が多い場合は、自前で双方向リストを実装したほうが高速に動作します。
 
push() shift() メソッドを使って、キューを実現する(要素数が少ない場合)

// キューを作成
var queue:Array = new Array();

// キューにデータを追加する
queue.push( {message:"テスト1"} );
queue.push( {message:"テスト2"} );
queue.push( {message:"テスト3"} );

// キューからデータを取り出す
var a:Object = queue.shift();
var b:Object = queue.shift();
var c:Object = queue.shift();

// 出力テスト
trace(a.message);
trace(b.message);
trace(c.message);
 
■双方向リストを使って、キューを実装する
 
キュークラス

package  {
	public class Queue {

		private var _queue:Object;

		public function Queue() {
			_queue = new Object();
			_queue.prev = _queue;
			_queue.next = _queue;
			_queue.data = undefined;
		}

		// ------------------------------------------------------------
		// キューにデータを追加する
		// ------------------------------------------------------------
		public function push(data:*):void{
			var prev:Object = _queue;
			var next:Object = prev.next;
			var list:Object = {data:data,prev:prev,next:next};
			prev.next = list;
			next.prev = list;
		};

		// ------------------------------------------------------------
		// キューからデータを取り出す
		// ------------------------------------------------------------
		public function pop():*{
			var list:Object = _queue.prev;
			var prev:Object = list.prev;
			var next:Object = list.next;
			prev.next = next;
			next.prev = prev;
			return list.data;
		};

	}
}
 
キュークラスを使用する

// ------------------------------------------------------------
// Queue オブジェクトを作成
// ------------------------------------------------------------
var queue:Queue = new Queue();

// ------------------------------------------------------------
// キューにデータを追加する
// ------------------------------------------------------------
queue.push( {message:"テスト1"} );
queue.push( {message:"テスト2"} );
queue.push( {message:"テスト3"} );

// ------------------------------------------------------------
// キューからデータを取り出す
// ------------------------------------------------------------
var a:Object = queue.pop();
var b:Object = queue.pop();
var c:Object = queue.pop();

// 出力テスト
trace(a.message);
trace(b.message);
trace(c.message);