2011-04-08 58 views
1

我一直在按照升序排序Arraycollection,降序排列數字列表。我收藏的總長度將上升到100。現在我想那種瓶坯嵌套數據這樣Flex AS3基於數組值的排序收集

數據結構

Name : String 
Categories : Array ["A","x or y or z","C"] 

分類陣列將擁有最大的3個項目,指出三個項目的第二項可以有3個不同的值X或Y或Z我的結果數據看起來像在這裏

{"Mike" , ["A","x","C"]} 
{"Tim" , ["A","y","C"]} 
{"Bob" , ["A","x","C"]} 
{"Mark" , ["A","z","C"]} 
{"Peter" , ["A","z","C"]} 
{"Sam" , ["A","y","C"]} 

請人解釋如何這種類型的數據中顯示所有「X」第一,「Y的方式進行排序「最後和」z「在最後和反之亦然。任何幫助真的很感激。謝謝阿南德。 。

回答

4

您可以在指定的SortField比較函數是這樣的:

var sortfield:SortField = new SortField("Categories"); 
sortfield.compareFunction = myCompare; 

var sort:Sort = new Sort(); 
sort.fields = [sortfield]; 

yourCollection.sort = sort; 

和你比較功能:

function myCompare(a:Object, b:Object):int { 
    /* 
     return -1, if a before b 
     return 1, if b before a 
     return 0, otherwise 
    */ 
} 

或類似的東西..它是未經測試的代碼:)

+1

這也許是有用的:http://stackoverflow.com/questions/1602385/sorting-an-arraycollection-in-flex – duedl0r 2011-04-08 16:59:53

0

我創建了一個名爲categoryOrder的數據結構的新屬性在setter中,我做了以下操作並使用categoryOrder進行排序 - sortBy = categoryOrder;。我知道很少需要硬編碼,但我仍然相信這會減少使用compareFunction時的比較次數。任何人都請驗證這個想法。謝謝!

public function set categories(data:ArrayCollection) :void 
    { 
     if(data != null) 
     { 
      _categories = data; 
      for each(var categorie:Object in data) 
      { 
       switch(categorie.categoryName) 
       { 
        case "x":{categoryOrder = 1;break;} 
        case "y":{categoryOrder = 2;break;} 
        case "z":{categoryOrder = 3;break;} 
       } 
      } 
     } 
    } 

數據結構

Name : String 
Categories : Array ["A","x or y or z","C"] 
categoryOrder : Number