Actionscript 3 Flex Sort是一种不应排序的排序(在ArrayCollection中)
我尝试使用以下排序对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;
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)解决方案使用了另一种排序: