Action Script 3.0 为数组排序
- 格式:doc
- 大小:43.50 KB
- 文档页数:2
ActionScript编程数组排序作用:对数组中的元素进行排序或反转。
说明:使用Array类的sort()、sortOn()和reverse()方法,可以通过排序或反向排序来更改数组中元素的顺序,以上这些方法都用来修改现有数组。
sort()方法可以对数组的元素进行简单排序。
当该方法不带参数时,会以升序排序数组元素,使用方法如下所示。
myArray.sort();sort()方法按照“默认排序顺序”重新安排数组中的元素。
默认排序顺序具有以下特征:●排序区分大小写,也就是说大写字符优先于小写字符。
例如,字母D优先于字母b。
●排序按照升序进行,也就是说低位字符代码(例如A)优先于高位字符代码(例如B)。
●排序将相同的值互邻放臵,并且不区分顺序。
●排序基于字符串,也就是说,在比较元素之前,先将其转换为字符串(例如,10优先于3,因为相对于字符串“3”而言,字符串“1”具有低位字符代码)。
如果需要不区分大小写或者按照降序对数组进行排序,或者数组中包含数字,从而需要按照数字顺序而非字母顺序进行排序,可以为sort()方法传递options参数,以改变默认排序顺序的各个特征,如下所示。
myArray.sort(options);options参数是由Array类中的一组静态常量定义的,它们将排序的行为从默认行为更改为其它行为,如下所示。
●Array.CASEINSENSITIVE:此选项可使排序不区分大小写。
例如,小写字母b优先于大写字母D。
●Array.DESCENDING:用于颠倒默认的升序排序。
例如,字母B优先于字母A。
●Array.UNIQUESORT:如果发现两个相同的值,此选项将导致排序中止。
●Array.NUMERIC:指定排序按照数字顺序进行,比方说3优先于10。
sortOn()方法可以根据数组中的一个或多个字段对数组中的元素进行排序。
数组应具有下列特性:●该数组是索引数组,不是关联数组。
●该数组的每个元素都包含一个具有一个或多个属性的对象。
数组元素是复杂值对象的排序方法以及逆序排列方法前面我们介绍了数组的sort方法,那么sort解决了字符串或数值作为数组元素的排列。
但是,如果数组元素是封装好的对象,这个时候怎么办?我们来看,第一个元素player1,它是一个对象,它有相应的键名还有键值。
我们同样再定义另外3个对象。
然后我们再定义一个数组,我们把这4个对象都放到这个数组里边。
这个时候,如果我想对它排序,我会有不同的原则,比如说我想让它按年龄age来排列。
注意,这个时候我可以用sortOn。
sortOn和sort在一些使用方式上类似的,只不过第一个参数要提供对比的键名。
我要对它排序,我选的参考对象是age,后边是对age参数的数组大小来进行比较,同时是一个降序。
如果我对整个的排序结果进行遍历,我们前边已经讲过循环访问的方法。
在这里比如说,i是无符号整数,i从0开始,如果i小于数组的长度,i就递增1。
然后trace(tournament[i].name);,前边我们已经对tournament按年龄进行降序排列了,降序就是年龄大的在前边,这里我们看年龄最大的是Paul,接着是Kazuya,然后Anna,然后Jack。
我们来看一下结果,正是按我们所预期的结果排序的。
这就是一个sortOn 的基本方法。
sortOn 就是说我按哪一个键去对比。
这是对于一个数组元素是一个复杂值对象的排序的方式。
除了我们前边所介绍的不同的排序方法,我们还可能遇到逆序这个方法。
比如说1,2,3,4,5,6.我想把它变成6,5,4,3,2,1。
这个时候我该怎么办呢?这个在数组里边有一个reverse的方法。
比如说,我有一个数组a,数组里面的元素是1,2,3,4,5,6,7,8,9。
我们trace(a.reverse());逆序排列。
我们来看一下结果9,8,7,6,5,4,3,2,1。
数组里元素的基本排序(1)接下来我们来看一下数组的排序方法。
一般来说,我们排序用的是sort方法。
默认情况下是按的unicode的值的顺序来排序的。
比如说,我们这个数组包含4个元素,我们对它排序,输出一下。
大家可以看到输出结果是“1,100,42,99”。
有人会问,为什么排序后还是这么没有规律呢?那是因为unicode的值的顺序本身是按字符串的顺序来排的。
字符串呢本身要先对比第一个字符。
1的第一个字符是1,100的第一个字符也是1,而42的第一个字符是4,所以100要排在42之前,这样自然而然就形成这样的排序了。
这个有可能不是我们所追求的最终结果。
另外,它还按升序来对比,也就是a要排在b之前,1要排在4之前;它还区分大小写,比如大写的Z排在小写a之前,因为Z的unicode的值是90,a的unicode的值是97,90要排在97之前。
那假如我不希望按这种方式来排序,那该怎么办呢?sort里面是可以提供一个方法参数的,也就是我们一般称之为排序方法的一个方法。
我们来自定义一个排序的函数方法,向sort里面提供一个参数compare,这个compare是我们下面定义的一个具体的函数名称,这个名称并不是固定的,你取其他的名称也可以的。
compare这个函数要提供两个不同的参数,一个A一个B。
这两个参数的名称你也可以自己取,但一定要提供两个参数,因为这两个参数它分别代表数组当中的两个不同的元素。
然后A和B进行比较,它要返回一个值,当返回的值是-1的情况下,A要放在B之前;如果返回是0的情况下,A和B相当于是相等,可以随机放;如果返回是1的话,A要放在B之后。
所以我们在这个函数比较方法里面,如果A>=B的时候,返回1,表示A要放在B之后;如果其他的情况,也就是A<B,返回-1,表示A在B之前。
我们来看一下输出结果,输出了“1,42,99,100”。
这或许是我们希望看到的结果,就是按照值的大小来判断排序。
Action Script 3.0 任意数量的参数ActionScript 3.0中引入了一个称为…(rest)参数的新参数声明,它可用来指定一个数组参数以接受任意多个以逗号分隔的参数。
此参数可以拥有保留字以外的任意名称,且声明时必须是最后一个指定的参数,其表现形式如下所示。
function 函数名(…参数):数据类型{函数体}例如,创建一个名为myArg()的函数,该函数用来计算参数之和。
在每次调用该函数时,定义传递的参数数量均不相同,代码如下所示。
function myArg(...args):int{var Sum:uint=0;for(var i:uint=0;i<args.length;i++){//遍历数组Sum+=args[i];//将所有数组元素相加}return Sum;//将求得的和返回}myArg(1,2); //输出结果为3myArg(1,2,3); //输出结果为6myArg(1,2,3,4); //输出结果为10…(rest)参数还可以与其它参数一起使用,前提是它必须是最后一个列出的参数。
例如,修改上面的myArg()函数,使它的第一个参数x为int型,第二个参数使用…(rest)参数。
输出结果将忽略第一个值,因为第一个参数不属于由…(rest)参数创建的数组。
function myArg(x:int,...args):int{var Sum:uint=0;for(var i:uint=0;i<args.length;i++){Sum+=args[i];}return Sum;}trace(myArg(1,2)); //输出结果为2trace(myArg(1,2,3)); //输出结果为5trace(myArg(1,2,3,4)); //输出结果为9。
Action Script 3.0 添加首尾元素在ActionScript中,在数组的开头和末尾添加元素需要使用类Array的unshift()和push()两种方法,如下所示。
1.unshift()方法该方法的作用是在数组的开头(索引号位置为0)处添加新的数组元素。
使用该方法将把数组中所有的元素的索引位置向后平移。
使用unshift()方法的格式如下所示。
数组名称unshift(插入的元素表达式或字符串);例如,一个按照字母的先后顺序排列的编程语言列表数组,如下所示。
var ProgLang:Array=new Array(3);//声明并创建一个包含4个元素的数组ProgLang[0]="Basic";//定义元素1ProgLang[1]="C#";//定义元素2ProgLang[2]="Fortran";//定义元素3trace(ProgLang);//输出数组中的所有元素执行上面的代码后,即可输出数组中所有的元素,如下所示。
Basic,C#,Fortran在这段代码中使用unshift()方法后,即可在该数组的开头部分插入新的元素,如下所示。
ProgLang.unshift("ActionScript");//在数组的开头插入新元素“ActionScript”将上面的代码添加到trace()函数之前并执行上面的代码,即可重新输出数组中的所有元素,如下所示。
ActionScript,Basic,C#,Fortranunshift()方法不仅可以在数组的开头插入单个元素,还可以插入多个元素,如下所示。
ProgLang.unshift("ActionScript","APA");//在数组的开头插入两个新元素“ActionScript”和“APA”将上面的代码插入到trace()函数之前并执行上面的代码,即可重新输出数组中的所有元素,如下所示。
Action Script 3.0 搜索数组中的元素用ActionScript编写的程序在执行过程中,可能需要访问数组中匹配指定值的元素,这就需要对数组中所有的元素进行搜索。
搜索和遍历的不同在于,遍历的目的是为了访问整个数组中每一个元素,而搜索则是有针对性地访问某个符合要求的元素。
在ActionScript中,搜索数组中的元素需要使用到类Array中的indexOf()和lastIndexOf()两种方法。
indexOf()方法的作用是从索引号为0的元素开始,搜索数组中是否包含某个元素。
该方法有两个参数,分别为searchElement和fromIndex。
●searchElement参数该参数可以为任意类型的变量。
定义该参数的值后,indexOf()方法即可搜索某个数组中是否包含与该参数值相等的元素。
●fromIndex参数该参数的作用是定义搜索数组元素的起始索引号。
其值为int类型变量,默认值为0。
indexOf()方法可以返回int类型的变量值。
如在数组中搜索到与searchElement参数相等的元素,则返回该元素的索引号。
否则将返回-1。
例如,在一个包含20以内所有平方数的数组中,查找是否包含数值169,如下所示。
var SquareNumber:Array=new Array(),i:int,m:int;//声明并创建函数SquareNumberfor (i=1; i<=20; i++) {//创建关于i的循环m=i*i;//求出i的平方值SquareNumber [i-1]=m;//将i的平方值定义为数组的元素}trace(SquareNumber.indexOf(169,0));执行上面的代码,即可使indexOf()方法返回数组SquareNumber中是否包含169。
通过使用indexOf()方法,可以制作一些查找数组元素的实例。
例如,数组aa包含所有清华电脑学堂出版的图书,用户输入图书的名称,即可了解图书是否为清华电脑学堂系列教材,其代码如下所示。
ActionScript3.0 编程基础_数据类型及其运算、程序流程关键字: flex7.3 数据类型和数据运算7.3.1 关于数据类型一个变量或者常量被声明时,必须指定其数据类型:原生数据类型:语言本身提供:字符串、整数、布尔型等复杂数据类型:由基本数据类型组成的复合型类型:类、接口等。
基本数据类型:∙Boolean:布尔型,true 和 false∙int:整数,存放32位二进制整数,范围:-2147483648~2147483647,当超出自动转为Number∙Null:空值,是字符串和所有类的默认值。
∙Number:整数型和浮点型,使用64位双精度格式存放数据,没有小数点时自动转换成整数。
最小值和最大值分别存放在Number 对象的MIN_VALUE 和 MAX_VALUE属性中。
∙String:字符串,以Unicode 编码格式存放。
∙uint:正整数类型,0~4294967295∙void:值为undefined,只能用作函数的返回类型。
1、Boolean:布尔型,它可以使用true或false(用于进行逻辑运算)两个值中一个值。
2、int:表示为 32 位带符号整数的数据类型。
int 类表示的值的范围是:-2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1)。
3、uint:表示 32 位无符号整数的数据类型的方法。
4、String:表示一串字符的数据类型。
5、Number:表示 IEEE-754 双精度浮点数的数据类型。
6、.Date:表示日期和时间信息。
复杂数据类型:Object 对象、 Array 数组、 Date 日期、Error 错误对象、Function 函数、 RegExp 正则表达式、XML XML数据对象、XMLList。
其中Object 是所有对象的基类。
以下是各个类型的默认值∙Object、Array :null∙Number:NaN∙int、uint:0∙Boolean:false∙*:不定类型,默认值:undefined。
Flash ActionScript30数组的随机排序-洗牌数组的随机排序-洗牌那有了排序方法这种设置之后呢,我们可以设置一个洗牌的程序。
这个洗牌啊,大家都应该知道,它是按乱序来排列的。
我们看下面有几张牌,我们要让它进行排序洗牌。
排序的方法我们命名为cheat。
给cheat提供两个具体的参数A和B,那么我们到底是返回1还是返回-1呢,我们返回一个随机的结果,大家都知道在Math.random这个方法里面它本身是会在0和1之间产生一个随机数。
Math.random > 0.5,1:-1; 这本身是一种分支结构的写法,产生的随机数大于0.5的概率就是一半,,如果大于0.5我返回的是1,中间用一个冒号隔开,如果小于0.5我返回的是-1。
我们来trace(myCard);,来看一下myCard的顺序。
经过多次输出,我们会发现都是不同的随机排序。
那刚才我们把排序方法命名为cheat,我们本身也是留了一个重新写cheat排序方法的一个空间,我们为什么要命名为cheat呢,这是因为我们在洗牌的过程当中留一个作弊的空间,我不是要教育大家或引导大家去作弊,只是说在这个排序当中是非常简单的就可以实现这种方式。
If(A==”红桃A”)也就是说,如果A等于红桃A的情况下,return 1;返回1,要把红桃A放在后边,否则如果A是其它元素,那就随机排序。
这样的运行结果,就是不管运行多少次,红桃A一定是在最后边的,它前边的元素随机排序。
我们把return 1变成return -1,那红桃A就一定是在最前边的,后边的元素一样随机排序。
这个本身就是通过一个具体的排序方法来实现一些简单的逻辑,它不是全部随机的了,它是内部约定好了的结果,像这里我们可以认为是红桃A优先。
Action Script 3.0 计算器程序在Windows系统中,集成了计算器程序。
用户可以用该程序进行四则运算。
本练习将使用ActionScript的运算符和组件,运用导入的素材制作一个简单的计算器程序,如图7-18所示。
图7-18 计算器程序在设计计算器程序时,需要通过循环的方式判断计算器键盘按钮的位置,将其按照一定的规则排列到舞台中。
(1)在Flash中,新建“calc.fla”影片文件,在【属性】面板中单击【大小】后面的按钮,打开【文档属性】对话框,修改影片大小为240像素×240像素,如图7-19所示。
图7-19 修改影片大小(2)执行【文件】|【导入】|【导入到库】命令,导入素材图像文件“calc.psd”。
分别将“background”、“resultfield”和“topbar”3个位图元件提取出来,在【库】面板中删除“calc.psd 资源”文件夹,如图7-20所示。
图7-20 将素材图像导入库中(3)在【库】面板中新建影片剪辑元件“bgimg”,将位图元件background拖动到“bgimg”中。
新建影片剪辑元件“bg”,将元件“bgimg”和位图元件“topbar”拖动到元件中,并设置元件“bgimg”的投影和模糊滤镜,如图7-21所示。
图7-21 制作计算器背景(4)新建影片剪辑元件“resultbg”,将“resultfield”位图元件拖动到“resultbg”影片剪辑元件中,如图7-22所示。
图7-22 制作输出屏幕背景(5)分别在影片剪辑元件“bg”和“resultbg”上右击执行【链接】命令,将其设置为ActionScript导出,对元件进行实例化,如图7-23所示。
图7-23 将元件实例化(6)从【组件】面板中将标签组件(Label)和按钮组件(Button)拖动到【库】面板中,即可按F9快捷键,将组件所在的类导入到影片中,代码如下所示。
import fl.controls.Button;//将按钮类导入到影片中import bel;//将标签类导入到影片中(7)在【动作】面板中声明计算器程序需要使用的各种对象,并为其设置对象类型,如下所示。
Action Script 3.0 练习价格排序ActionScript的多维数组功能可以表现各种列表类型的数据。
使用ActionScript数组的sortOn()方法,可以对多维数组进行排序。
例如将价格按照从低到高的顺序排列。
本练习将使用ActionScript数组制作一个价格列表,并对列表的项目进行排序,如图5-18所示。
图5-18 价格排序程序制作价格排序程序,首先应将所有产品和价格存储到二维数组中,然后再使用数组对象的sortOn属性对二维数组中的子元素进行排序。
(1)在Flash中新建影片文件“price.fla”,将默认图层“图层1”重命名为“背景”,并导入素材图像“background.jpg”,如图5-19所示。
图5-19 导入素材背景图像(2)新建“组件背景”图层,并选择【基本矩形工具】,在舞台中绘制一个圆角矩形,并设置其背景颜色和边线颜色,如图5-20所示。
图5-20 绘制组件的背景(3)新建“组件”图层,在舞台中插入1个标签组件(Label)、1个文本域组件(TextArea)以及4个按钮组件(Button),如图5-21所示。
图5-21 插入组件,如表5-5所示。
(5)新建“动作脚本”图层,选中图层并按F9快捷键,在图层中添加ActionScript 代码。
首先创建二维数组,并添加数组的元素和子元素,如下所示。
var PriceList:Array=new Array();//创建数组PriceListPriceList.push (["Core2 E7200","¥",795]);//添加数组元素和子元素PriceList.push (["PenD E5200","¥",565]);//……PriceList.push (["Core2 E6750","¥",1050]);(6)定义舞台中的标签组件、文本域组件以及按钮组件的样式,如下所示。
Action Script 3.0 为数组排序
排序是管理数组元素的一项重要操作。
通过对数组元素的排序,可以提高处理数组中元素的效率,实现各种复杂的操作。
在ActionScript中,可以使用类Array的方法sort()来对数组进行排序。
sort()方法的主要作用是用Unicode(计算机使用的统一二进制编码,将所有计算机支持的自然语言都转换为唯一的二进制编码,以满足跨自然语言、跨平台的文本转换的一种编码方式。
)的方式对索引数组进行简单排序。
其使用方法如下所示。
数组名.sort(参数);
在默认状态下,使用sort()方法对数组进行排序时,sort()方法遵循如下3条规则。
●升序排列
在默认状态下,sort()方法会对数组进行升序排列,例如,a会排列在b之前,而数字1也会排列在数字2之前。
●区分大小写
在使用sort()方法对数组进行排序时,会区分大写和小写字母,并且大写字母会排在小写字母之前。
例如,字符Z要排列在字符a之前。
●字符串方式
在使用sort()方法对数组进行排序时,无论数组的元素是何种数据类型,都按照字符串数据类型进行排序。
例如,数字10和2,如按照整数类型排序,2应在10之前。
而按照字符串类型排序,则10应在2之前。
例如,将由一些无序数字组成的数组进行排序,使数组按照数字的大小安排索引号,如下所示。
var Numeric:Array=new Array(3,2,4,5,1,6,7);//声明数组[3,2,4,5,1,6,7]
Numeric.sort();//对数组中的元素进行排序
trace(Numeric);//输出数组元素
执行上面的代码,可以输出排序后的数组元素,如下所示。
1,2,3,4,5,6,7
上面的例子中,sort()方法为一组纯数字组成的数组进行了排序。
除了为数字排序外,sort()方法还可以为字符串变量等进行排序。
例如,为数组[a,92,277,de,gif,action]排序,也可以使用sort()方法,如下所示。
var Num:Array=new Array("a",92,277,"de","gif","Action");
//声明数组[a,92,277,de,gif,action]
Num.sort();//对数组中的元素排序
trace(Num);//输出数组元素
执行上面的代码,即可输出排序后的数组元素,如下所示。
277,92,Action,a,de,gif
除了默认的方式外,还可以通过参数来定义sort()方法对数组的排序方式。
在ActionScript中,sort()方法共有6种参数,如表5-2所示。
表5-2 sort()方法的参数
Num.sort(1);
//对数组中的元素排序,不区分大小写。
参数还可以写成Array.CASEINSENSITIVE
执行代码,即可输出不区分大小写的排序,如下所示。
277,92,a,Action,de,gif
sort()方法可以验证数组中元素的唯一性,当数组中存在重复元素时则返回0,否则按照默认的规则进行排序,例如,在上面的数组中添加一个a,然后输出4或Array.UNIQUESORT的参数,如下所示。
var Num:Array=new Array("a",92,277,"de","gif","Action","a");
//声明数组[a,92,277,de,gif,action,a]
trace(Num.sort(Array.UNIQUESORT));
//输出验证重复元素的结果
执行上面的代码,即可得到返回的值“0”。
使用sort()方法还可以对数组的索引号进行排序,并将排序的索引号输出,如下所示。
var Num:Array=new Array(3,9,2,19,162,28,131);
//声明数组[3,9,2,19,162,28,131]
trace(Num.sort(Array.RETURNINDEXEDARRAY));
//输出数组排序后的索引号
执行上面的代码,即可输出排序后的索引号,如下所示。
6,4,3,2,5,0,1。