|
数组: AS2里的数组类型有两个比较牛的地方: 1)数组对象自身可以存放任何数据类型,而不是如C++中的int a[2],char a[3],someClass a[3]. 当然,坏处也立刻突现了出来,无法直接创建对象数组。 2)完全的动态数组,使用非常简单,有点像Vector,但同时也更易用出错。这里的动态指的是数组边界的大小(当然,维数还是要声明好的)。
下面是关于数组类型的一些个人认为比较重要点的小结,一些旁枝性的东东都略去了, 哪里少讲了或讲错了什么的话请务必帮我指出一下,大家共同提高: 1 以下声明错误:
var a[1]:Array=new Array(); function test(arr[]:Array):Void
2声明方式1(注,这里的声明方式全部使用强类型声明方式)
var a:Array=new Array(); a[0]=0; a[1]=1; trace(a); //Output 0,1
3声明方式2
var a:Array=new Array(4); a[4]=1; trace(a); //Output undefined,undefined,undefined,undefined,1
解释:动态数组,用a[4]后长度自动变成5。
4声明方式3 4.1
var b:Array=new Array(0,1,2,3); trace(b); 0,1,2,3
4.2并不支持这种形式的二维数组的嵌套定义
var b:Array=new Array((1,2),(3,4),(5,6)); trace(b); trace(b[0]+" "+b[1]+" "+b[2]+" "+b[3]); trace(b[0][0]); 2,4,6 2 4 6 undefined
undefined 5用[]取代了C++中的{};
声明方式4
var b:Array=[[1,2],[3,4],[5,6]]; trace(b); trace(b[0]+" "+b[1]+" "+b[2]+" "+b[3]); trace(b[0][0]); 1,2,3,4,5,6 1,2 3,4 5,6 undefined//用b[0]输出了一个数组行. 1
6二维的维数设定同样是动态的:
var b:Array=[[1,2],[3,4],[5,6]]; b[2][3]=12; trace(b[2][3]); //Output 12
7其它的二维数组声明方式: 7.1通过行首参数设定相应的列数. //
2*3 Array Declare. var gRowIndex:Number=2; var gColIndex:Number=3; var a:Array=new Array(gRowIndex); for (var i=0;i<gRowIndex;i++) { a[i]=new Array(gColIndex); for (var j=0;j<gColIndex;j++) { a[i][j]=String(i)+String(j); } } trace(a); //Output 00,01,02,10,11,12
8数组作函数为参数的传递. 8.1
var b:Array=new Array(0,1,2,3); function test(arr:Array):Void { trace(arr[0]+" "+arr[1]+" "+arr[2]+" "+arr[3]+" "); } test(b); 0 1 2 3
8.2 二维数组:
var b:Array=[[1,2],[3,4],[5,6]]; function test(arr:Array):Void { trace(arr); trace(arr[0]+" "+arr[1]+" "+arr[2]+" "+arr[3]+" "); } test(b); 1,2,3,4,5,6 1,2 3,4 5,6 undefined
8.3 行首参数的传递:
var b:Array=[[1,2],[3,4],[5,6]]; function test(arr:Array):Void { trace(arr); trace(arr[0]+" "+arr[1]+" "); } test(b[0]); test(b[1]); test(b[2]); 1,2 1 2 3,4 3 4 5,6 5 6
9更多: 9.1
var gRowIndex:Number=2; var gColIndex:Number=3; var a:Array=[[0,1],[3,4,5]];//某个位置空缺某个元素,这里为[0][2] trace(a); for (var i=0;i<gRowIndex;i++) { for (var j=0;j<gColIndex;j++) { trace(a[i][j]); } } 0,1,3,4,5 0 1 undefined 3 4 5
9.2动态维数并不支持
var b:Array=[5,6]; b[0][0]=3; trace(b[0][0]); //Output undefined。
9.3一个间接对象数组实现的例子.
var enArray=new Array(3); // ------ 连接到ENEMY数组 --------- // for(var j=0;j<3;j++){ attachMovie("baddie", "baddie"+j, 200+j); enArray[j] = _root["baddie"+j]; enArray[j]._x = 50*j; enArray[j]._y = 100; }
9.4 还有很多实际中用得到的例子,比方说,用array 来保存颜色数据,加载图片的变量名等等。
10删除数组元素: 10.1一维:
var p=new Array(1,2,3,4,5); p.splice(1); trace(p); var t=new Array(1,2,3,4,5); t.splice(2,1); trace(t); //Output 1 1,2,4,5
10.2二维情况:
var b:Array=[[1,2],[3,4],[5,6]]; b[0].splice(0);//delete c[0][0] c[0][1] trace(b); var c:Array=[[1,2],[3,4],[5,6]]; c[1].splice(1);//c[1][1] trace(c); ,3,4,5,6 1,2,3,5,6
11长度测试:
var b:Array=[[1,2,2],[3,4],[5,6,4,5]]; trace(b.length); trace(b[0].length); trace(b[2].length); //Output 3 3 4
========================================================= 一个月后的补充: 11动态维数:跟JAVA中一样的.
var arr:Array=new Array(1); arr[0]=new Array(3); arr[0][0]=1; arr[0][1]=2; arr[0][2]=3; trace(arr); trace(arr[0][0]); trace(arr[0][1]); trace(arr[0][2]); 1,2,3 1 2
12加载数据的新方式(多重属性):
mData=new Array(); mData.addItem({ label: "二球动量守恒(一维)" ,data:0}); mData.addItem({ label: "三球动量守恒(一维)" ,data:1}); mData.addItem({ label: "多球平面碰撞(二维)",data:2}); mData.addItem({ label: "子母球",data:3});
用于配合V2Component中的ComboBox的使用:
_root.menuCombo.dataProvider=mData;
|