2010-06-30 5 views
0

배열 컬렉션 정렬을 살펴 보았습니다. 지금까지 오름차순 및 내림차순으로 숫자를 정렬하는 것과 같은 것을 보았습니다. 내가 찾고있는 다른 배열의 값의 순서에 따라 arraycollection을 정렬 멀리 발견하는 것입니다. 예flex의 배열 값을 기반으로 배열 컬렉션 정렬

:

I 10의 수치를 포함하는 배열을 갖는다. 나는 또한 arraycollection을 가지고있다. 각 arracycollection 항목의 속성 중 하나는 이전 배열의 값 중 하나에 해당합니다.

배열의 값 순서에 따라 arraycollection을 정렬 할 수 있기를 원합니다.

가장 좋은 방법은 무엇입니까?

첫 번째 배열을 반복하면서 그 값으로 arraycollection의 항목을 찾은 다음 새 arraycollection에 추가했지만 첫 번째 값은 점점 길어지는 것처럼 보였습니다. 그것은 영리한 방법입니다.

편집

이것은 내가 지금까지 함께 재현 한 것입니다. 그래도 조금 둥근 것 같아.

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; 
    }