多维数组

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 
*/