Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 根据子剪辑中的值对MovieClips数组进行排序_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 根据子剪辑中的值对MovieClips数组进行排序

Actionscript 3 根据子剪辑中的值对MovieClips数组进行排序,actionscript-3,flash,Actionscript 3,Flash,我有一个叫做Table的类,它链接到舞台上的一个剪辑。 在安装过程中,我创建了许多表实例,并将每个表实例传递给TableData类的实例。此TableData对象包含一个ID值 我将选择的表对象放入数组中,我希望根据每个表的TableData实例中的ID值对其进行排序 我希望使用的是类似于:myArray.sortOn(“tableData.id”) 这似乎不起作用,我假设Array.sortOn()无法深入到子剪辑中。 有什么方法可以实现这一点吗?数组和泛型向量。集合都提供了采用函数的.sor

我有一个叫做Table的类,它链接到舞台上的一个剪辑。 在安装过程中,我创建了许多表实例,并将每个表实例传递给TableData类的实例。此TableData对象包含一个ID值

我将选择的表对象放入
数组中
,我希望根据每个表的TableData实例中的ID值对其进行排序

我希望使用的是类似于:
myArray.sortOn(“tableData.id”)

这似乎不起作用,我假设
Array.sortOn()
无法深入到子剪辑中。
有什么方法可以实现这一点吗?

数组
和泛型
向量。
集合都提供了采用函数的
.sort()
方法的另一种形式。您可以提供自己的排序实现,在这种情况下,它可以查看对象并只比较其中的特定部分

考虑以下类别:

class TableData {
    public var ID:String;

    public function TableData(id:String):void {
        this.ID = id;
    }

}
这是
TableData
类的简化版本,它只提供
ID
。然后是一个简化的
类:

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")));
现在,应该按照您想要的方式对
列表进行排序

看一看


有关更多详细信息,请参见

我已通过在我的表类中存储一个重复的ID值并对其进行排序,解决了这个问题。这是可行的,但并不理想,因为ID值会经常更改,我需要额外的工作来保持副本的更新。我仍然很想知道是否有更干净的方法可以做到这一点。干杯:)回答得好,解释得很好。谢谢你的帮助。
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;
}
list.sort(sortUsingDataID);