ランキング作る時の配列(Array)操作

ランキング用のデータとして「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 : 節 : 配列の要素がオブジェクトのとき、オブジェクトの値でソートする

このエントリーをはてなブックマークに追加
はてなブックマーク - ランキング作る時の配列(Array)操作

Comments:2

taka:nium 09-07-22 (水) 17:40

rankArr.sortOn( “score”, Array.NUMERIC | Array.DESCENDING );
パラメータは複数同時に使えますよー。

tera 09-07-22 (水) 17:44

はうあっ!!!!!!!

Comment Form
Remember personal info

Return to page top