我想以一种我不确定的方式对数组进行排序。
通常当你想要排序时,你会有这样的事情。
var dataSortField1:SortField = new SortField();
dataSortField1.name = fieldOneToSortBy;
dataSortField1.numeric = fieldOneIsNumeric;
var dataSort:Sort = new Sort();
dataSort.fields = [dataSortField1];
arrayCollection.sort = dataSort;
arrayCollection.refresh();
所以,如果我有一个班级
public class ToSort {
public var int:a
}
我可以输入
var ts1:ToSort = new ToSort();
ts1.a = 10;
var ts2:ToSort = new ToSort();
ts2.a = 20;
var arrayCollection:ArrayCollection = new ArrayCollection([ts1, ts2])
var dataSortField1:SortField = new SortField();
dataSortField1.name = "a";
dataSortField1.numeric = true;
var dataSort:Sort = new Sort();
dataSort.fields = [dataSortField1];
arrayCollection.sort = dataSort;
arrayCollection.refresh();
这很好用。我的问题是我现在继承了一个在其中有另一个类的类,我也需要对此进行排序。 例如
public class ToSort2 {
public var int:a
public var ToSortInner: inner1
}
public class ToSortInner {
public var int:aa
public var int:bb
}
如果a在多个类中相同,那么我想对ToSortInner2.aa进行排序这是否可行。我试图将inner1.aa作为排序字段名称传递,但这不起作用。
希望这很清楚。如果没有,我会发布更多代码。
由于
答案 0 :(得分:2)
您需要编写自定义排序compareFunction。您可以深入查看函数内的对象属性。
概念上是这样的:
public function aSort(a:Object, b:Object, fields:Array = null):int{
if(a.aa is b.aa){
return 0
} else if(a.aa > b.aa) {
return 1
} else{
return -1
}
}
创建排序对象时,可以指定比较功能:
var dataSort:Sort = new Sort();
dataSort.compareFunction = aSort;
arrayCollection.sort = dataSort;
arrayCollection.refresh();
答案 1 :(得分:0)
Sort还有另一个属性compareFunction。