多維度陣列

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

多維度陣列包含其它做為元素的陣列。舉例來說,假如有一份工作清單,其儲存為字串的索引陣列:

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

如果要為一週中每一天的工作個別儲存一份清單,可以建立多維度陣列,讓一週中的每一天各用一個元素來代表。每個元素都包含一個類似於 tasks 陣列的索引陣列,以儲存工作清單。您可以在多維度陣列中,使用任意組合的索引或關聯陣列。下一節的範例會使用兩個索引陣列,或是索引陣列的一個關聯陣列。您也可以嘗試其它組合做為練習。

兩個索引陣列

當您使用兩個索引陣列時,可以用表格或試算表將結果具體呈現出來。第一個陣列的元素代表表格的列,而第二個陣列的元素則代表欄。

例如,下列多維度陣列會使用兩個索引陣列來追蹤一週中每一天的工作清單。第一個陣列 masterTaskList 是使用 Array 類別建構函式所建立。陣列中的每個元素都代表一週中的一天,其中索引 0 代表星期一,索引 6 代表星期日。我們可以把這些元素想像成表格中的列。您可以為 masterTaskList 陣列中所建立的七個元素各指定一個陣列常值,以建立每天的工作清單。這些陣列常值都代表表格中的欄。

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,再使用代表第二項工作的索引 1。

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

若要擷取星期天清單的第一項工作,請先使用代表星期天的索引 6,再使用代表第一項工作的索引 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 
*/