多次元配列

Flash Player 9 以降、Adobe AIR 1.0 以降

多次元配列には、配列の要素としてさらに配列が格納されています。 例えば、ストリングのインデックス配列として格納される予定リストがあるとします。

var tasks:Array = ["wash dishes", "take out trash"];

曜日ごとに異なる予定リストを格納する必要がある場合は、各曜日を要素として持つ多次元配列を作成できます。 それぞれの要素として、予定リストを表す tasks 配列と同様のインデックス配列を格納します。多次元配列内では、インデックス配列と結合配列を任意に組み合わせて使用できます。 以降のセクションでは、2 つのインデックス配列を使用する例と、結合配列およびインデックス配列を 1 つずつ使用する例を示します。 また、実習として、考えられる残りの組み合わせについても作成してみてください。

2 つのインデックス配列を使用する例

インデックス配列を 2 つ使用した場合の結果は、テーブルまたはスプレッドシートのような図で表現できます。 第 1 の配列に含まれる要素がテーブルの行を表し、第 2 の配列に含まれる要素が列を表します。

例えば、次の多次元配列には、曜日ごとの予定リストを 2 つのインデックス配列として格納しています。 第 1 の配列 masterTaskList は、Array クラスのコンストラクターを使用して作成します。この配列の各要素は曜日に対応し、インデックス 0 が月曜、インデックス 6 が日曜を表します。 それらの要素は、テーブルの行と見なすことができます。 各曜日の予定リストは、 masterTaskList 配列内にある 7 つの要素それぞれに配列リテラルを割り当てることで作成できます。これらの配列リテラルは、テーブルの列を表します。

var masterTaskList:Array = new Array(); 
masterTaskList[0] = ["wash dishes", "take out trash"]; 
masterTaskList[1] = ["wash dishes", "pay bills"]; 
masterTaskList[2] = ["wash dishes", "dentist", "wash dog"]; 
masterTaskList[3] = ["wash dishes"]; 
masterTaskList[4] = ["wash dishes", "clean house"]; 
masterTaskList[5] = ["wash dishes", "wash car", "pay rent"]; 
masterTaskList[6] = ["mow lawn", "fix chair"];

配列アクセス( [] )演算子を使用すると、どの予定リストのアイテムにも個別にアクセスできます。最初の角括弧で曜日を指定し、2 番目の角括弧でその日の予定リスト内の項目を指定します。 例えば、水曜日の予定リストから 2 番目の予定を取得するには、水曜日を表すインデックス 2 と、予定リストの 2 番目の項目を表すインデックス 1 を指定します。

trace(masterTaskList[2][1]); // output: dentist

日曜日の予定リストから 1 番目の予定を取得するには、日曜日を表すインデックス 6 と、予定リストの 1 番目の項目を表すインデックス 0 を指定します。

trace(masterTaskList[6][0]); // output: mow lawn

結合配列の下位にインデックス配列を組み合わせる例

曜日について結合配列を使用し、予定リストについてインデックス配列を使用すると、個別の配列に対するアクセスが容易になります。 結合配列では、特定の曜日を参照するときにドットシンタックスを使用することができますが、結合配列の各要素にアクセスするために、実行時の処理時間が余分に犠牲になります。 次の例では、曜日ごとにキー / 値ペアを指定し、予定リストの基礎として結合配列を使用しています。

var masterTaskList:Object = new Object(); 
masterTaskList["Monday"] = ["wash dishes", "take out trash"]; 
masterTaskList["Tuesday"] = ["wash dishes", "pay bills"]; 
masterTaskList["Wednesday"] = ["wash dishes", "dentist", "wash dog"]; 
masterTaskList["Thursday"] = ["wash dishes"]; 
masterTaskList["Friday"] = ["wash dishes", "clean house"]; 
masterTaskList["Saturday"] = ["wash dishes", "wash car", "pay rent"]; 
masterTaskList["Sunday"] = ["mow lawn", "fix chair"];

ドットシンタックスを使用すると、角括弧の繰り返しを避けることができるため、コードが読みやすくなります。

trace(masterTaskList.Wednesday[1]); // output: dentist 
trace(masterTaskList.Sunday[0]);// output: mow lawn

for..in ループを使用して予定リストを反復処理できますが、各キーに関連付けられた値にアクセスするには、ドットシンタックスの代わりに配列アクセス( [] )演算子を使用する必要があります。 masterTaskList は結合配列であるため、次の例に示すように、必ずしも期待する順序で要素を取得する必要はありません。

for (var day:String in masterTaskList) 
{ 
    trace(day + ": " + masterTaskList[day]) 
} 
/* output: 
Sunday: mow lawn,fix chair 
Wednesday: wash dishes,dentist,wash dog 
Friday: wash dishes,clean house 
Thursday: wash dishes 
Monday: wash dishes,take out trash 
Saturday: wash dishes,wash car,pay rent 
Tuesday: wash dishes,pay bills 
*/