0

私は配列コレクションのソートを見てきました。これまでのところ、昇順と降順で数値的にソートするようなものを見てきました。私が探しているのは、別の配列の値の順序に基づいて配列コレクションをソートする方法を見つけることです。

例えば:

10個の数値を含む配列があります。配列コレクションもあります。各 arracycollection エントリのプロパティの 1 つは、前の配列の値の 1 つに対応します。

配列内の値の順序に基づいて、配列コレクションを並べ替えられるようにしたいと考えています。

これへの最良の方法は何ですか?

最初の配列をループして最初の値を取得し、その値を持つ配列コレクション内のエントリを見つけて、それを新しい配列コレクションに追加することを考えていましたが、それはちょっと長すぎるようで、賢い方法があるかもしれないと思っていましたそれ。

編集

ここまでまとめてみました。少し丸すぎるように見えますが

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

1 に答える 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;
    }
于 2010-07-01T08:17:53.267 に答える