配列をソートするサンプル
配列をソートするAPIとして、Array#sortとArray#sortOnが提供されています。
Array#sort
配列の要素をソートします。
- 引数で比較関数(第一引数)とオプション(第二引数)が指定できます。
- 比較関数を指定することで、任意のロジックに基づくソートが可能です。
- オプションでソート方向や、比較形式(数値で比較する)を指定できます。
- 引数を指定しない場合、文字列としてソートされます。
var array:Array = [ 1, 21, 5, 3, 10 ]; // オプションなしでソート // 各値は文字列としてソートされる。("10"と"5"だと"5"の方が後) array.sort(); log( array.join(",") ); // 1,10,21,3,5 // オプションを指定 // 数値としてソート("10"と"5"だと"10"の方が後) array.sort(Array.NUMERIC); log( array.join(",") ); // 1,3,5,10,21 // 数値として&逆順にソート array.sort(Array.NUMERIC|Array.DESCENDING); log( array.join(",") ); // 21,10,5,3,1 // 関数でソート順を指定することも可能。 array.sort( function(a:*,b:*):int { return a%10 - b%10 } ); log( array.join(",") ); // 10,21,1,3,5 // 関数+オプション array.sort( function(a:*,b:*):int { return a%10 - b%10 }, Array.DESCENDING ); log( array.join(",") ); // 5,3,21,1,10
Array#sortOn
オブジェクトの配列を、オブジェクトの指定した属性でソートします。
- 引数で、ソート条件とする属性とオプションを指定できます。
- ソート条件とするカラムは複数指定でき、最初の条件属性の値が同じであった場合、2つめの条件属性の値でソートされます。。
- Array#sortと違って比較関数は指定できません。
// オブジェクトの配列 var f:Function = function():String { return this.a+":"+this.b;} var objects:Array = [ { "a":1, "b":10, toString:f }, { "a":21, "b":10, toString:f }, { "a":5, "b":3, toString:f }, { "a":3, "b":7, toString:f }, { "a":10, "b":3, toString:f }, ]; // 属性"a"でソート。 // オプションを指定していないので文字列としてソートされる objects.sortOn("a"); log( objects.join(",") ); // 1:10,10:3,21:10,3:7,5:3 //属性"b"で数値として逆順でソート。 objects.sortOn("b", Array.NUMERIC|Array.DESCENDING ); log( objects.join(",") ); // 21:10,1:10,3:7,10:3,5:3 //第一ソート条件を属性"b",第二ソート条件を"a"で数値としてソート。 objects.sortOn(["b","a"], Array.NUMERIC ); log( objects.join(",") ); // 5:3,10:3,3:7,1:10,21:10