Actionscript 3 Flex Sort是一种不应排序的排序(在ArrayCollection中)

Actionscript 3 Flex Sort是一种不应排序的排序(在ArrayCollection中),actionscript-3,sorting,apache-flex,position,swap,Actionscript 3,Sorting,Apache Flex,Position,Swap,我尝试使用以下排序对arrayCollection进行排序: private function sortArray(questions:ArrayCollection):void { questions.sort = new Sort(); questions.sort.fields = [new SortField("rank")]; questions.sort.compareFunction = rankFunction;

我尝试使用以下排序对arrayCollection进行排序:

    private function sortArray(questions:ArrayCollection):void
    {
        questions.sort = new Sort();
        questions.sort.fields = [new SortField("rank")];
        questions.sort.compareFunction = rankFunction;
        questions.refresh();
    }

    private function rankFunction(a:int, b:int, array:Array = null):int
    {
        if(a == b)
        {
            return 0;
        }
        if(a>b)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }
共有23个对象,所有对象的秩均为0

我希望不会更改任何内容,但在刷新之后,ArrayCollection的位置0和位置11处的项目交换了位置

在rankFunction中,始终返回0

有人能告诉我这里出了什么问题吗?

比较函数的ASDoc应该有以下签名:

function [name](a:Object, b:Object, fields:Array = null):int
字段
数组指定对象字段

所以Sort不会为您提取字段值。你应该自己做


关于您的问题,AS3似乎隐式地将
对象
转换为
ints
调用
rankFunction
。如果是这样的话,
将通过某种与项创建顺序相对应的内部代码进行比较。

使用此函数时效果相同:私有函数sortArray(array:ArrayCollection):void{var sort:sort=new sort();sort.compareFunction=rankFunction;array.sort=sort;array.refresh();}私有函数rankFunction(a:Object,b:Object,array:array=null):int{if(a.rank==b.rank){返回0;}if(a.rank>b.rank){return 1;}否则{return-1;}}实际上您只更改了
Object
int
。我的主要观点是您应该自己从Object中提取字段。不,这就是我所做的:如果(a.rank==b.rank)解决方案使用了另一种排序: