標籤雲

搜尋此網誌

2009/03/19

將 Array 裡的物件依照自訂規則做排序

這是今天遇上的一個小問題
還好查過 doc 之後豁然開朗
趕快記錄在這邊

故事是這樣的
我用了一個 Array 存放了一些 MovieClip
並希望他們在做某個動作之前先照他們的 y 軸數值做排序
一開始我用的是 Array 的 sortOn 方法
如下:
myArr.sortOn(y, Array.NUMERIC);
但結果並不如預期是照 y 的數值去排列
(很奇怪..不知出問題的原因為何...)

原本打算自己寫個 Function 來解決
但後來又仔細查了 doc
發現 sort 方法有一個參數
可以指定某個自訂 Function 讓 sort 方法依此來做排序
簡單 code 如下:

/*將 Array 裡的物件照自訂規則排序
* 此 Function 要傳入兩個參數並回傳 Number */
myArr.sort(sortOnMyRule);

/*自訂的排序 Function */
private function sortOnMyRule(a:DisplayObject, b:DisplayObject):Number {
if (a.y > b.y) return 1; //將 a 排在 b 的前面
else if (a.y < b.y) return -1; //將 a 排在 b 的後面
else return 0; //排序優先順序相同
}

這樣 Array 就會依照傳回的值把裡面的物件排序完成, 太棒了!
以後要更專心看 doc 才行....

沒有留言: