我一直致力于对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”,反之亦然。任何帮助都非常感谢。谢谢阿南德。
答案 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