5

ステージ上のクリップにリンクされているTableというクラスがあります。セットアップ中に、多くのTableインスタンスを作成し、それぞれにTableDataクラスのインスタンスを渡します。このTableDataオブジェクトにはID値が含まれています。

ArrayTableDataの各Tableのインスタンス内のID値に基づいて並べ替えたいTableオブジェクトの選択を配置します。

私が使いたかったのは次のようなものでした。myArray.sortOn("tableData.id");

これは機能していないようで、Array.sortOn()子クリップにドリルダウンできないと思います。これを達成する方法はありますか?

4

1 に答える 1

5

およびArrayジェネリックコレクションはどちらも、関数を受け取るメソッドVector.<>の代替形式を提供します。.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;
}

この関数は 2 つの項目を取得することを想定しており-1、 、0、または のいずれかを返す必要があり1ます。a前に来る必要がある場合b、関数は を返す必要があり-1ます。それ以外の場合、 のa後に来る必要がある場合はb、 を返す必要があり1ます。最後に、2 つが同じ場合は、値 を返す必要があります0

.sortしたがって、関数を呼び出して渡すことにより、カスタムの並べ替え関数を使用して、配列自体に再分類するように指示する必要があります。

list.sort(sortUsingDataID);

これで、list必要な方法で並べ替える必要があります。

ここで実際の例を参照してください。

詳細については、ドキュメントを参照してください

于 2012-12-19T19:36:09.700 に答える