ActionScript3でオブジェクトを複数条件ソートする時のメモ。
sortOn() を使うと一発でできるのでラクチンです。
しかし条件の指定をちょっと変えると結果が全然違ってくるので注意です。
下の例では全て「y」「x」の順にソートしています。
var list:Array = [ new Point(5, 5), new Point(0, 10), new Point(10, 10), new Point(10, 0) ]; list.sortOn( ["y", "x"] ); // 文字列比較で小さい順に並べている。文字列だから「10<5」になる。 // (x=10, y=0),(x=0, y=10),(x=10, y=10),(x=5, y=5) list.sortOn( ["y", "x"], Array.DESCENDING ); // 降順ソート。こちらも文字列だから「10<5」になる。 // (x=5, y=5),(x=10, y=10),(x=0, y=10),(x=10, y=0) list.sortOn( ["y", "x"], [Array.NUMERIC, Array.NUMERIC] ); // どちらも数値としてソート // (x=10, y=0),(x=5, y=5),(x=0, y=10),(x=10, y=10) list.sortOn( ["y", "x"], [Array.DESCENDING | Array.NUMERIC, Array.NUMERIC] ); // 「y」は「数値で降順」、「x」は「数値で昇順」 // (x=0, y=10),(x=10, y=10),(x=5, y=5),(x=10, y=0) list.sortOn( ["y", "x"], [Array.DESCENDING|Array.NUMERIC, Array.DESCENDING|Array.NUMERIC] ); // どちらも「数値で降順」 // (x=10, y=10),(x=0, y=10),(x=5, y=5),(x=10, y=0)
Array.CASEINSENSITIVE | 大文字と小文字を区別しないソート |
---|---|
Array.DESCENDING | 降順のソート順 |
Array.UNIQUESORT | 一意性ソート要件 |
Array.RETURNINDEXEDARRAY | sort() メソッドまたは sortOn() メソッドの呼び出し結果としてインデックス付き配列を返す |
Array.NUMERIC | 数値によるソート |
Array.UNIQUESORT はちょっと特殊で、ソート対象に同じ値が混ざっていないかチェックします。
同じ値が混ざっている場合は並び替えをせず「0」を返します。
No comments yet.