Array:神奇的数组
即时获得麻球游戏开发的最新消息,关注游戏开发者热门讨论,请各位开发者申请加入麻球官方群:121304476
也可以follow catfly围脖:t.sina.com.cn/iscat

曾经有设计者问我,需要掌握哪些东西才能学好actionscript,我毫不犹豫给他推荐了"array",几乎我们平时的程序编写中,存放数据,交换数据,变换数据都会用到这个神奇的数组:Array。

我在这里提一下,可能有人一开始没太注意:
您可以在数组元素中存储各种各样的数据类型,包括数字、字符串、对象,甚至是其它数组。

基本的东西我只简单介绍下,就不多说了,数组的常用方法无非是:
push(… args)
arr.pop()
arr.splice()
arr.indexOf()

下面是一些在实际开发中会常见到的几种不错的应用:

数组元素之和

function arraySum(arr:Array,n:uint):uint {
        if (n>arr.length) {
                n=arr.length;
        }
        var total:uint=0;
        for (var k:uint=0; k<n; k++) {
                total=total+arr[k];
        }
        return total;
}

数组元素连接成字符串(有更简便的方法,见后文)

function arrToString(tempArray:Array):String {
        var tempString:String;
        for (var i:uint=0; i<timeInfo.length; i++) {
                if (i==0) {
                        tempString=tempArray[0];
                } else {
                        tempString+="|"+tempArray[i];
                }
        }
        return tempString;
}

随机取数组中的一个元素

var rsArr:Array=new Array  ;
var dataArr:Array=[1,24,23,2];
var dataLength:uint=dataArr.length;
randomArr(dataArr);
function randomArr(arr:Array):void {
        for (var i:uint=0; i<dataLength; i++) {
                var arrIndex:uint=Math.random()*arr.length;

                rsArr[i]=arr[arrIndex];
                arr.splice(arrIndex,1);
        }
        trace(rsArr);
}

去除数组元素中的干扰成分后再进行排序

var arr0:Array=new Array("苹果:4.8","香蕉:1.8","桔子:2.3","番茄:1.2");
arr0.sort(order0);
trace(arr0);
function order0(a,b) {
        var ceil1 = a.split(":")[1];
        var ceil2 = b.split(":")[1];
        if (ceil1>ceil2) {
                return 1;
        } else if (ceil1<ceil2) {
                return -1;
        } else {
                return 0;
        }
}

根据数组中对象的某个属性进行排序

var arr:Array = new Array();
for (var i:uint=0; i<5; i++) {
        var obj:Object = new Object();
        obj.name="anim"+i;
        obj.time=0.5+int(Math.random()*15);
        arr.push(obj);
        trace(arr[i].time);
}
arr.sort(order);
function order(a,b) {
        if (a["time"]>b["time"]) {
                return 1;
        } else if (a["time"]<b["time"]) {
                return -1;
        } else {
                return 0;
        }
}

再补充说一下,数组自带的两个方法,可能大家没留意的用法
arr.concat(… args)有同事问我如何不用跑循环就可以把两个数组合成一个,concat方法就是为这个目的而设计的。

var numbers:Array = new Array(1, 2, 3);
var letters:Array = new Array("a", "b", "c");
var numbersAndLetters:Array = numbers.concat(letters);

arr.join(sep:*)很方便的在数组元素间插入指定的分隔符、连接这些元素然后返回结果字符串。
上面的arrToString方法,用join方法很简单就可以实现了。

var myArr:Array = new Array("one", "two", "three");
trace(myArr.join("|"));

还有个很简单的问题,可能有些actionscript初学者没注意到。那就是如何清空或重置数组?
数组没有自带这样的方法,其实只要把一个新的空数组赋值给它就行了。

arr = new Array();
猫推拼盘

Leave a Reply