TheArray
和 genericVector.<>
集合都提供了另一种形式的.sort()
方法,它接受一个函数。您可以提供自己的排序实现,在这种情况下,它会查看对象并仅比较它们的特定部分。
考虑以下类:
class TableData {
public var ID:String;
public function TableData(id:String):void {
this.ID = id;
}
}
这是您的TableData
类的简化版本,仅提供ID
. 然后是一个简化的Table
类:
class Table {
private var _data:TableData;
public function get data():TableData {
return _data;
}
public function Table(tableData:TableData) {
_data = tableData;
}
}
最后,让我们使用它们,并启动一个新的集合。
var list:Vector.<Table> = new Vector.<Table>();
list.push(new Table(new TableData("X")));
list.push(new Table(new TableData("C")));
list.push(new Table(new TableData("S")));
list.push(new Table(new TableData("A")));
现在,我们需要创建一个新函数来实际进行比较:
private function sortUsingDataID(a:Table, b:Table):int {
var aID:String = a.data.ID;
var bID:String = b.data.ID;
return aID < bID ? aID == bID ? 0 : -1 : 1;
}
此函数将期望获得两个项目,并且应该返回-1
、0
或1
。如果a
应该在之前,b
那么函数应该返回-1
。否则,如果a
应该在之后b
,那么它应该返回1
。最后,如果两者相同,则返回值应为0
。
.sort
所以,现在我们只需要通过调用并传入我们的函数来告诉数组使用我们的自定义排序函数来使用自己。
list.sort(sortUsingDataID);
现在list
应该按照您想要的方式进行排序。
在此处查看一个工作示例。
有关更多详细信息,请参阅文档