基于值数组的Flex AS3 Arraycollection排序

时间:2011-04-08 16:21:55

标签: flex actionscript-3 sorting

我一直致力于对Arraycollection进行排序,例如升序,降序数字列表。我的收藏总长度将达到100.现在我想对这样的嵌套数据进行排序。

数据结构

Name : String
Categories : Array ["A","x or y or z","C"]

类别数组最多有3个项目,在这3个项目中,第二个项目可以有3个不同的值X或Y或Z.我的结果数据如下所示

{"Mike" , ["A","x","C"]}
{"Tim" , ["A","y","C"]}
{"Bob" , ["A","x","C"]}
{"Mark" , ["A","z","C"]}
{"Peter" , ["A","z","C"]}
{"Sam" , ["A","y","C"]}

任何人都请解释如何以一种方式对这类数据进行排序,首先显示所有“x”,然后是“y”,最后是“z”,反之亦然。任何帮助都非常感谢。谢谢阿南德。

2 个答案:

答案 0 :(得分:4)

您可以在SortField中指定比较功能,如下所示:

var sortfield:SortField = new SortField("Categories");
sortfield.compareFunction = myCompare;

var sort:Sort = new Sort();
sort.fields = [sortfield];

yourCollection.sort = sort;

和您的比较功能:

function myCompare(a:Object, b:Object):int {
   /*
       return -1, if a before b
       return 1,  if b before a
       return 0,  otherwise
   */
}

或类似的东西..它是未经测试的代码:)

答案 1 :(得分:0)

我为名为categoryOrder的数据结构创建了一个新属性。在setter中,我执行了以下操作,并使用categoryOrder进行排序 - sortBy = categoryOrder;。我知道需要很少的硬编码,但我相信这会减少使用compareFunction时的比较次数。任何人请有效的这个想法。谢谢!

    public function set categories(data:ArrayCollection) :void
    {
        if(data != null)
        {
            _categories = data;
            for each(var categorie:Object in data)
            {
                switch(categorie.categoryName)
                {
                  case "x":{categoryOrder = 1;break;}
                  case "y":{categoryOrder = 2;break;}
                  case "z":{categoryOrder = 3;break;}
                 }
            }
        }
    }

数据结构

Name : String
Categories : Array ["A","x or y or z","C"]
categoryOrder : Number