pop*_*rap 5 flash actionscript-3
我有一个名为Table的类,它链接到舞台上的剪辑.在安装过程中,我创建了许多Table实例,并为每个实例传递一个TableData类的实例.此TableData对象包含ID值.
我Array根据TableData的TableData实例中的ID值,选择了一些我的Table对象.
我希望使用的是: myArray.sortOn("tableData.id");
这似乎不起作用,我认为Array.sortOn()不能深入到子剪辑.我有办法实现这个目标吗?
的Array和通用Vector.<>的集合两者提供的另一种形式.sort(),其需要的功能的方法.您可以提供自己的排序实现,在这种情况下,它会查看对象并仅比较它们的特定部分.
考虑以下课程:
class TableData {
public var ID:String;
public function TableData(id:String):void {
this.ID = id;
}
}
Run Code Online (Sandbox Code Playgroud)
这是您的TableData类的简化版本,仅提供ID.然后是一个简化的Table类:
class Table {
private var _data:TableData;
public function get data():TableData {
return _data;
}
public function Table(tableData:TableData) {
_data = tableData;
}
}
Run Code Online (Sandbox Code Playgroud)
最后,让我们使用它们,并启动一个新的集合.
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")));
Run Code Online (Sandbox Code Playgroud)
现在,我们需要创建一个实际进行比较的新函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
此功能会期望获得两个项目,并返回值应该是-1,0或1.如果a应该在此之前b,函数应该返回-1.否则,如果a应该来b,那么它应该返回1.最后,如果两者相同,那么它应返回值0.
所以,现在我们只需要通过调用.sort和传入我们的函数来告诉数组使用我们的自定义排序函数.
list.sort(sortUsingDataID);
Run Code Online (Sandbox Code Playgroud)
现在list应该按照你想要的方式排序.
有关详细信息,请参阅文档
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |