ActionScript Array

由于最近项目需要,做一个代理ActiveX的东东,兼容在火狐浏览器。所以最近把学习ActionScript记录下来。

 

我从全局函数学起,如果有Javascript编程语音基础,学习ActionScript就容易些。

 

Array全局函数

  定义数组:

    1.利用Array构造函数定义数组。

    语法:var variable:Array  = new Array(numElements:int = 0)

    声明变量在ActionScript中用var,和JavaScript里一致,在ActionScript中声明变量的语法:var variable:数据类型

    这点有点像delphi语法,例如:var str:string;但是和C#里不一样,string str;

    在回到数组中,构造函数中有一个参数,带有默认值为0(ActionScript不支持方法重在,但Array的构造函数有两个版本)

    假如我定义如下数组

      var arr:Array = new Array()   //定义了一个长度为0的数组arr

      var arr:Array = new Array(10)  //定义了一个长度为10的数组arr,并且初始化为undefined

      可以测试我们代码:

      for(var i:int=0;i<arr.length;i++)

      {

        trace(arr[i]+"\n");   //输出undefined;

      }

    

      定义一个指定长度的数组,并且赋值

      var arr:Array = new Array(3);

      arr[0] = 1;

      arr[1] = 2;

      arr[2] = 3;

      可以利用循环赋值

      for(var i:int=0;i<arr.length;i++)

      {

        arr[i] = i;

      }

 

      可以看出访问数组和JavaScript一样,用variable[index]即可

 

       var:arr:Array = new Array(1,2,"hello",true); 这个就是Array的构造函数的另一个版本,可以直接初始化数组。

           2.直接量直接定义初始化数组

      var arr:Array = [];

      var arr:Array = [1,2,3,4,"hello",true];

  

      定义了arr可以通过typeof来查看变量的类型,typeof(arr)//输出object,可以看出Array全局函数继承自object,应该我们以后学习的全局函数都继承自object

      Array数组的length属性是一个读写属性,在ActionScript里这样实现:

        public function get length:uint; //read

        public function set length(value:uint):void; //write

      所以ActionScript中length可以动态变量数组的长度,注意改变的时候如果length的长度大于数组本身,增加数组元素,并且初始化为undefined;如果length的

      长度小于数组本身,则截断数组。

        var arr:Array = new Array();

        arr.length = 8;

        arr.length = 5;      

 

      知道了数组的长度可以通过length来改变,下面应该学习Array里的方法了。

      首先看看push(),pop(),unshift(),shift(),其实就用数组显示了计算机科学中的栈(Stack)和队列(Queue)

      1.push()和pop()

        栈是计算机中一种限定只能操作队尾操作的线性表,遵循先进后出的原则。

        push()进栈

        var arr:Array = new Array();   //length 0

        arr.push("hello");  //length 1

        arr.push(true);  //length 2

        var arrLen:uint = arr.push(1);  //length 3; arrLen 3

        pop()退栈

        arr.pop();  //length = length -1   2

                      var val:Boolean=arr.pop();  //1  val=true

           push(...argument)可以是ActionScript允许的任何类型,Boolean,String,Number,Object,Array

        

        所以可以利用push构造二维数组,

          var arr:Array = new Array();
             var arr1:Array = new Array(0,1,2);
                            var arr2:Array = new Array(3,4,5);
                            var arr3:Array = new Array(6,7,8);
                            arr.push(arr1);
                            arr.push(arr2);
             arr.push(arr3);
             for(var i:int=0;i<arr.length;i++)
                          {
                               for(var j:int=0;j<arr[i].length;j++)
                                  {
                                         trace(arr[i][j]+"\n");  //输出0,1,2,3,4,5,6,7,8
                                  }
                          }

      2.unshift()和shift()

        队列是计算机科学中一种限定只能操作队首的线性表。遵循先进先出的原则。

        var arr:Array = new Array();

        arr.unshift("hello");  //length 1

        arr.unshift(1);  //length 2

        var len:uint = arr.unshift(true);  //length 3   len=3

        arr.shift();   //length 2

        var val:int = arr.shift();  //length 1  val = 1

    其他的方法:

      1.toLocaleString();返回数组元素的字符串

        var arr:Array = new Array(1,2,true,"hello");
            trace(arr.toLocaleString());  //输出 1,2,[object Boolean],[object String]

      2.indexOf,lastIndexOf;

        查找在数组中的元素,返回该元素的位置,lastIndexOf从尾部开始查找

      3.join(sep:*)

        将数组中的元素转换成字符串,用分隔符相连。

           var arr:Array = new Array(1,2,true,"hello");
           var s:String = arr.join(",");

         trace(s);  //输出1,2,true,hello

      4.splice(startIndex:int, deleteCount:uint,...values):Array

        给数组添加元素或删除数组元素,返回数组

        var arr:Array = new Array(1,2,true,"hello");

        arr = arr.splice(0,2);

        trace(arr.join(","));  //输出1,2

      5.Sort()和OnSort()方法

        数组排序

      其他的方法在以后的应用中介绍。

posted on 2009-12-31 16:24  kiny  阅读(2076)  评论(0)    收藏  举报