2012-04-28 14 views
0

これに単純な答えがあるかどうかはわかりませんが、そうでないと仮定しているので、ここにいます。AS3:正しい順序で文字列を維持しながら配列を降順に並べ替え

基本的には、ゲームのハイスコアを記録する非常に単純なハイスコアテーブルを実行したいと思いますが、各スコアの横に正しい名前も表示します。

これはすべて簡単ですが、私は1つの配列でこれを行うことができます。正しくこのトレース結果

var d:Array; 
var e:Array; 
d = "827-Harry".split("-"); 
d.push("918-John".split("-")); 
trace(d) 

827、ハリー、918、ジョン

私の質問ですが、私は配列を使用する方法

は例えば、私はこのコードを持っています。

d = 918、John、827、Harry

このようにしてsort()(または同様のもの)を作成します。

この例に限定することはできません。つまり、カスタム名と動的なスコアで作業する必要があります。

事前に乾杯!ハリー。

答えて

4

連想配列を作成し、sortOn()を使用します。

var highscores:Array = new Array(); 
highscores.push({score: 827, player: "John"}); 
highscores.push({score: 918, player: "Harry"}); 
highscores.sortOn("score", Array.DESCENDING | Array.NUMERIC); 

for (var i:int = 0; i < highscores.length; i++) 
{ 
    trace(highscores[i].score, highscores[i].player); 
} 
+0

これはとても簡単だとは思っていませんでした。奇妙なことに、これまで使用していた配列は見たことがありません。私に何か新しいことを教えていただきありがとうございます。 – hazdog

0

は、あなたがそのようなあなたのハイスコアを保存お勧めはないでしょうが、私はので、ここであなたがやりたい正確にどのようにだ理由を知りません。

public function sortArray(arrUnsorted:Array):Array 
{ 
    var arrLocal:Array = new Array(); 
    var arrSorted:Array = new Array(); 

    for (var i:int = 0; i < arrUnsorted.length; i += 2) 
    { 
     arrLocal.push({ score:int(arrUnsorted[i]), name:arrUnsorted[i + 1] }); 
    } 

    arrLocal.sortOn("score", Array.DESCENDING | Array.NUMERIC) 

    for each(var obj:Object in arrLocal) 
    { 
     arrSorted.push(String(obj.score), obj.name); 
    } 

    return arrSorted; 
} 

そして、それは同じくらい簡単です:これはあなたが後にしているものです

var arrUnsorted:Array = ["827", "Harry", "918", "John"]; 
var arrSorted:Array = sortArray(arrUnsorted); 

trace(arrSorted); // 918,John,827,Harry 

希望。

+0

助けてくれてありがとうございます - この方法で配列を並べ替えるのはどうしたらいいですか? – hazdog

+0

配列をソートする必要があるたびに2つのループを実行すると、ソートしているスコアの数に応じてプロセッサが集中する可能性があります。今日のコンピュータとAVM2 _(AS3コードを実行する仮想マシン)の最適化により、目立った影響なしに何千ものスコアをソートできるはずです。だから、これがあなたの得点をどのように扱いたいのであれば、何百万というものをソートするつもりがない限り、うまくいくはずです。TheDarkIn1978のソリューションの素晴らしい点は、単一の 'Array'オブジェクトの格納とソートだけです。 – xLite

+0

さて、多くのお返事ありがとうございました:)私のアプリは何千もの人には届かないと思いますので、私はこの方法にこだわるべきです。 – hazdog

関連する問題