第12章数组ActionScript3.0语言中数组类型与其他语言有很大的不同。最大的区别在于:数组不仅是数据类型,也是一种类。数组类中定义了很多对数组的操作方法。例如,push方法在数组尾部添加元素,pop方法在数组首部去除元素。另外,数组类中的元素可以是任意的,即数组中的元素不一定都是相同数据类型。12.1数组简介数组保存一组相关联的数据,用来组织和处理这些数据。数组概念在生活中是很常见的。例如,学生名单包含姓名、性别、家庭地址等信息。ActionScript3.0的数组类不但可存储一维数组,也可存储多维数组。读取数据时采用循环遍历的方法。ActionScript3.0数组里可以存储字符串、数字、布尔值或引用的类型。同一个数组中可以存不同类型的数据,这点与其他语言有很大的区别。12.1.1数组的分类在ActionScript3.0中数组分为两类:整型下标数组和联合数组。两者都是组织相关数据,只是访问数据的方法不同而已。整型下标数组:数组的每个元素都用唯一的整数下标来索引。通过下标排序,起始值为0,每个元素保存在索引指定的位置。联合数组:用字符串关键字作为每个元素的索引。12.1.2创建数组的方法ActionScript3.0中使用数组前需创建数组对象。数组长度是指数组在内存空间中占有的连续空间长度。创建数组对象时可对数组赋初值。元素可以是常量或变量。另外,使用“[]”操作符也可以在创建数组对象时赋初值。12.2在数组首部和尾部添加元素为数组添加新元素是数组中最常见的处理之一。Array类中提供了push()方法和unshift()方法来添加元素。其中push()方法是在数组尾部追加元素,unshift()方法是在数组首部添加元素。另外,使用“[]”操作符也可实现元素的添加。12.2.1数组尾部添加新元素函数pushArray类的push()方法在数组的尾部添加元素,一次可以添加多个值。元素可以是变量或常量。以下代码使用push()方法在数组尾部添加两个元素“val1”和“val2”。12.2.2使用“[]”操作符在尾部添加新元素使用“[]”操作符也可在尾部添加新元素。由于数组下标的最大值为Array.length-1,所以给下标为Array.length的元素赋值就相当于在数组的尾部添加元素。12.2.3数组首部添加新元素函数unshift使用unshift()方法可在数组首部插入新元素。12.3遍历数组元素用户可使用循环语句遍历数组。使用“[]”操作符可访问相应位置的数组元素。数组可顺序遍历,下标从0开始至Array.length-1。12.4搜索匹配的数组元素搜索匹配的数组元素的方法很多。最简单的方法使用for语句配合break语句。用for循环找到第一个匹配的元素后使用break语句退出循环。这种顺序搜索方式的缺点是效率不高。第三方类ArrayUtilities中提供了findMatchIndex()、findLastMatchIndex()和findMatchIndices()三种方法来搜索数组元素。ArrayUtilities类在ascb.util包中。引用时需要在代码前添加“importascb.util.*”语句。12.4.1findMatchIndex()方法findMatchIndex()方法的作用是在指定的数组中搜索匹配的数组元素。若找到,则返回第一个匹配的元素下标。若没有找到,则返回-1。findMatchIndex()方法有4个参数:数组对象。需要匹配的值。搜索的开始下标。此参数可缺省,默认为0。布尔值,表示是否返回部分匹配元素。此参数可默认,默认为false,即不返回部分匹配元素。12.4.2findLastMatchIndex()方法和findMatchIndices()方法findLastMatchIndex()方法的作用是返回最后一个匹配的元素下标。findMatchIndices()方法的作用是返回所有匹配的元素下标数组。两者的参数使用方法与findMatchIndex()方法相同。12.5删除数组元素删除一个或多个数组元素有多种方法。splice()方法删除指定位置的元素。pop()方法删除尾部元素。shift()方法删除首部元素。12.5.1删除任意数组元素函数splicesplice()方法可删除任意数组元素。删除后其他后续元素会自动向前移位,数组总长度也自动变化。splice()方法的参数有两个:开始下标删除元素个数。此参数可默认,默认为从起始位置到末尾的全部元素个数。12.5.2删除数组首部元素函数shift使用shift()方法可删除数组首部元素,并返回被删除的值。12.5.3删除数组尾部元素函数pop使用pop()方法可删除数组尾部元素,并返回被删除的值。12.5.4删除特定值的数组元素使用for语句配合splice()方法可删除特定值的数组元素。需要注意的是,使用splice()方法删除数组元素时,数组的总长度会自动变化,所以用户要注意下标的变化。12.6在数组中插入元素要在数组中间插入元素可使用splice()方法。splice()方法不仅可以删除元素,也可以插入元素。插入方法是要将splice()方法的第二个参数设置为0,从第三个参数开始为要插入的元素。12.7转换字符串为数组字符串可以转换为数组,使用String类的split()方法就能实现。split()方法在介绍字符串替换中已有涉及,本节将具体介绍split()方法。String类的split()方法把字符串转换为数组,但前提是字符串中含有统一的分隔符。例如,字符串中以逗号作为分隔符。split()方法有两个参数:分隔符,用以分隔字符串。此参数可默认,默认为“”(空字符串)。数组长度,表示分隔后的数组的最大长度。此参数可默认,默认为全部放入数组。12.8转换数组为字符串数组也可以转换为字符串,使用join()方法就能实现此功能。连接符是指以某字符串来连接数组元素,从而转换为字符串。此参数可默认,默认为逗号。12.9复制数组一个数组变量并不包含数组数据,而是指向内存中存放数组数据的位置。所以数组的比较和复制都和基本类型有所不同。基本变量的复制只需要将基本变量的值赋给另一个变量即可,但数组变量的赋值只是表示两个数组变量指向相同的引用位置。此时修改一个数组变量中的值会同时修改另一数组变量的值,因为两个变量指向同一内存空间。12.9.1concat()方法复制数组可以使用Array类中的concat()方法。concat()方法返回一维数组的完整复制。12.9.2slice()方法Array类中的slice()方法可以从指定位置开始复制数组。开始下标为0时表示复制整个数组。12.9.3ArrayUtilities类的duplicate()方法concat()方法和slice()方法只能复制一维整型下标数组。如果是多维的数组就不能使用它们复制。12.10存储多维数据多维数据是指数据的存储具有多层次性。例如,矩阵是典型的二维数据,三维坐标是三维数据。存储多维数据的一种简单方法是采用平行数组。平行数组是指下标有一一对应的关系的多个数组。使用平行数组操作同一下标的元素就能访问多维数据。需要注意的是,如果改变了一个数组长度,必须同时修改其他数组。存储多维数组最好的方法是创建多维数组。其中二维数组是最常用的多维数组。12.11数组排序数组排序是指对数组按某一规则排序。例如,按字母升序排列、按数字升序排列等。ActionScript3.0中对于整型下标数组可使用sort()方法排序,对于对象数组可使用sortOn()方法排序。12.11.1sort()方法对于整型下标数组可使用sort()方法进行排序。若要按字母降序排列,排序常量值应为Array.DESCENDING。若对数字数组使用不带参数的sort()方法排序,会根据第一个数字的ASCII码排序。使用Array.RETURNINDEXEDARRAY排序常量能得到排序后数组元素的下标顺序,但不改变原始数组。12.11.2sortOn()方法对象数组以关键字作为索引组织数据,如{make:Honda,year:1997,color:maroon}中的make、year和color都为关键字。对对象数组排序可使用sortOn()方法。sortOn()方法的参数为排序的关键字。多个关键字之前以“|”分隔。若只按一个关键字排序可省略“[]”。12.12实现自定义排序有时数组类提供的排序方式并不满足用户要求,此时用户可以自定义数组排序方式。方法是把自定义的比较函数传递给sort()方法。12.13数组元素的最大值和最小值获取数字数组的最大元素和最小元素在程序中很常见。解决办法是先经过数字排序,然后读取数组的第一个和最后一个元素。12.14比较数组比较数组是指比较两个数组之间的关系。数组间的关系有两种:相等和不相等。两个数组相等的条件是每个位置上的元素都相同。正确的方法是使用循环语句一一比较每个位置的元素。12.15联合数组联合数组在其他的语言叫做哈希表,在ActionScript3.0里就是Object类的一个实例。联合数组使用名称元素来代替数字下标,该名称也被称为关键字或属性。关键字关联了元素值,每个元素都有特定的含义。12.15.1创建联合数组创建联合数组不是用Array类而是用Object类创建。12.15.2访问联合数组元素有两种方法访问联合数组元素:一种是通过关键字访问元素,一种是使用“[]”操作符访问元素。12.15.3遍历联合数组联合数组使用关键字作索引,没有下标,所以不能使用for语句遍历。联合数组可以通过for…in语句进行遍历访问。12.16小结数组是ActionScript3.0语言中最常使用的类型之一。ActionScript3.0中的数组类型动态分配内存空间,可以存储任意的数据类型。数组分为整型下标数组和联合数组两种。数组的常见处理包括添加新元素、删除元素、遍历数组、在数组中搜索字符串、拷贝数组、数组排序、存储多维数组等。利用数组类提供的方法可直接或间接地实现相应操作。