在as3裡,vector可以透過sort()函數來進行排序
跟array比較不同的是,array的sort可以不帶參數或是用定義好的參數帶入
例如:
Array.CASEINSENSITIVE:這個選項會忽略大小寫限制加以排序。例如,小寫字母 b 會排在大寫字母 D 之前。
Array.DESCENDING:這會反轉預設的依遞增順序排序。例如,字母 B 會排在字母 A 之前。
Array.UNIQUESORT:這會在發現兩個相同的值時,中止排序作業。
Array.NUMERIC:這會進行數值排序,因此 3 會排在 10 之前。
在vector的sort裡一定要帶入一個自訂義用來執行排序的function,或是也可以使用上面的參數帶入
例如:vector.sort(Array.CASEINSENSITIVE);
如果今天有5個MovieClip要進行名字的排序的話,就可以用自定義的涵式來執行了。
import flash.display.MovieClip; import flash.text.TextField; //先建立5個MovieClip var mc1:MovieClip = new MovieClip(); var mc2:MovieClip = new MovieClip(); var mc3:MovieClip = new MovieClip(); var mc4:MovieClip = new MovieClip(); var mc5:MovieClip = new MovieClip(); //命名 mc1.name = "mc_1"; mc2.name = "mc_2"; mc3.name = "mc_3"; mc4.name = "mc_4"; mc5.name = "mc_5"; //此時在mcVector裡的MovieClip已經不是按照mc_1、mc_2 ...的順序排列了 var mcVector:Vector.<MovieClip> = new Vector.<MovieClip>(); mcVector[0] = mc3; mcVector[1] = mc5; mcVector[2] = mc1; mcVector[3] = mc4; mcVector[4] = mc2; trace(showName(mcVector)); //output mc_3,mc_5,mc_1,mc_4,mc_2 mcVector.sort(vectorSortFunction); trace(showName(mcVector)); //output mc_1,mc_2,mc_3,mc_4,mc_5 function vectorSortFunction(firstMc:MovieClip , secandMc:MovieClip) { //先把名字後面的數字拆出來 var number1:int = int(firstMc.name.split("_")[1]); var number2:int = int(secandMc.name.split("_")[1]); //之後在用數字去作排序 if (number1 > number2) { //這邊返回1的意思是,如果前面的數字大於後面的數字,前面的對象就要往後排 return 1; } else if (number1 < number2) { //返回-1的意思是,如果前面的數字小於後面的數字,前面的對象就要往前排 return -1; } else { //返回0的意思是,一樣的話就不變動順序 return 0; } } function showName(vector:Vector.<MovieClip>):String { var _txt:TextField = new TextField();; for each (var mc:MovieClip in vector) { _txt.appendText(mc.name+","); } return _txt.text; }