- 2009-07-22 (水) 14:20
- action script
ランキング用のデータとして「ID」「点数」を配列につっこんで保存する方法をとることがあります。
ActionScript 上で並べ替えるとすると、
var rankArr:Array=[[田中,50],[山本,97],[木田,100],[鈴木,69]]
みたいな二次元配列にする方法もあるけれど、ActionScript で二元次元配列のソートは数行コードを書く必要が出てくるので、こうじゃなくって、
var rankArr:Array=[{id:田中,score:50},{id:山本,score:97},{id:木田,score:100},{id:鈴木,score:69}]
という感じで id と score をキーにしたオブジェクトを配列につっこんでおいた方が
rankArr.sortOn("score", Array.NUMERIC);
とすることで
for (var i:uint = 0; i < rankArr.length; i++ ) {
trace(rankArr[i].id+"は"+rankArr[i].score);
}
//出力:田中は50 鈴木は69 山本は97 木田は100
点数順で並べ替えできるのでラクチン。
でもこの状態だと、数字の小さい順に並ぶ。ランキングは点が高い方が先頭の方がいいなと思っても、Array.DESCENDING(降順)でやるのはよくない。なんでかっていうと、NUMERIC(数値)以外のソートは String(文字列)で並べ替えるので、97,69,50,100 って感じで100の"1"を最後にもってきちゃう。
なので、点数順の降順ソートは
rankArr.sortOn("score", Array.NUMERIC);
rankArr.reverse();
でいいかな。→よくない↓
追記:
コメントいただきました。条件パラメーターは複数同時に使えるとのことです。
rankArr.sortOn(“score”, Array.NUMERIC | Array.DESCENDING );
参考:
彩音 - Adobe AIR - 研究室 : 章 : ActionScript 3.0 : 節 : 配列の要素がオブジェクトのとき、オブジェクトの値でソートする
- Newer: パパパコメント
- Older: AS3 の addChildAt