基于flex中的数组值对数组集合进行排序

时间:2010-06-30 08:53:44

标签: sorting flex3 arraycollection

我一直在研究排序数组。到目前为止,我已经看到过数字排序按升序和降序排序。我正在寻找的是发现基于另一个数组中值的顺序对arraycollection进行排序。

例如:

我有一个包含10个数值的数组。我也有一个数组收集。每个arracycollection条目的一个属性对应于前一个数组中的一个值。

我希望能够根据数组中值的顺序对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;
    }

1 个答案:

答案 0 :(得分: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;
    }