Flex Sort是排序,不应对任何内容进行排序(在ArrayCollection中)

时间:2016-03-24 23:35:36

标签: actionscript-3 sorting flex position swap

我尝试使用此Sort:

对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个对象,所有都具有rank = 0

我预计什么都不会改变但是在刷新之后,ArrayCollection的位置0和11处的项目交换了它们的位置。

在rankFunction中,总是返回0。

谁能告诉我这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

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

function [name](a:Object, b:Object, fields:Array = null):int

并且fields数组指定了对象字段。

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

关于您的问题,似乎AS3隐式地将Objects转换为ints来调用rankFunction。如果是这样,items被某些内部代码比较,这些内部代码以某种方式对应于项目创建的顺序。

相关问题