2010-06-30 6 views
0

Я искал сортировку массивов массивов. До сих пор я видел такие вещи, как сортировка в порядке возрастания и убывания. То, что я ищу, - это выяснить, как сортировать arraycollection на основе порядка значений в другом массиве.Сортировка коллекции массивов на основе значения массива в flex

Для примера:

У меня есть массив, содержащий 10 числовых значений. У меня также есть arraycollection. Одно из свойств каждой записи arracycollection соответствует одному из значений в предыдущем массиве.

Я хочу, чтобы иметь возможность сортировать arraycollection на основе порядка значений в массиве.

Каков наилучший способ для этого?

Я думал о том, чтобы пройти первый массив, получив первое значение, найдя запись в arraycollection с этим значением, а затем добавив его к новому массиву arraycollection, но, похоже, он длинный, и я надеялся, что может быть умный способ сделать это.

EDIT

Это то, что я кусочкам до сих пор. Кажется, что слишком много вокруг, хотя

private function parseXML(xml:XML):void 
    { 

     var s:String=xml.toXMLString() 
     artistinfo=convertXmlToArrayCollection(s) 

     sort() 
     dispatchEvent(new XMLEvent(XMLEvent.XML_PARSED)) 
     //artistinfo.sort() 

    } 

    private function clone(source:Object):* 

    { 
     var myBA:ByteArray=new ByteArray(); 
     myBA.writeObject(source); 
     myBA.position=0; 
     return (myBA.readObject()); 

    } 




    private function sort():void 
    { 
     var myAC:ArrayCollection=new ArrayCollection(clone(artistinfo.source)); 
     //artistinfo=new ArrayCollection(); 
     var amt:int=trackids.length; 

     var value:Number=0 
     var arr:* 
     var index:Number 
     for (var i:int=0; i < amt; i++) 
     { 
      value=trackids[i]; 
      index=getItemIndexByProperty(myAC, "id", new String(value)) 
      artistinfo[i]=myAC.getItemAt(index) 

     } 

    } 


    public function getItemIndexByProperty(array:ArrayCollection, property:String, value:String):Number 
    { 
     for (var i:Number=0; i < array.length; i++) 
     { 
      var obj:Object=Object(array[i]) 
      if (obj[property].value == value) 
       return i; 
     } 
     return -1; 
    } 

ответ

0

Я собираюсь добавить в свое редактирование как ответ на данный момент.

Это может быть полезным для кого-то, кто приземляется здесь от поиска

Если кто-то может предложить более краткий или лучший способ, пожалуйста, пост!

private function parseXML(xml:XML):void 
    { 

     var s:String=xml.toXMLString() 
     artistinfo=convertXmlToArrayCollection(s) 

     sort() 
     dispatchEvent(new XMLEvent(XMLEvent.XML_PARSED)) 
     //artistinfo.sort() 

    } 

    private function clone(source:Object):* 

    { 
     var myBA:ByteArray=new ByteArray(); 
     myBA.writeObject(source); 
     myBA.position=0; 
     return (myBA.readObject()); 

    } 




    private function sort():void 
    { 
     var myAC:ArrayCollection=new ArrayCollection(clone(artistinfo.source)); 
     //artistinfo=new ArrayCollection(); 
     var amt:int=trackids.length; 

     var value:Number=0 
     var arr:* 
     var index:Number 
     for (var i:int=0; i < amt; i++) 
     { 
      value=trackids[i]; 
      index=getItemIndexByProperty(myAC, "id", new String(value)) 
      artistinfo[i]=myAC.getItemAt(index) 

     } 

    } 


    public function getItemIndexByProperty(array:ArrayCollection, property:String, value:String):Number 
    { 
     for (var i:Number=0; i < array.length; i++) 
     { 
      var obj:Object=Object(array[i]) 
      if (obj[property].value == value) 
       return i; 
     } 
     return -1; 
    } 
Смежные вопросы