0

これに対する単純な答えがあるかどうかはわかりませんが、ないと仮定しているので、ここにいます。

基本的に、ゲームのハイスコアを追跡するだけでなく、各スコアの横に正しい名前を表示する、非常に単純なハイスコア テーブルを実行したいと考えています。

これはすべて簡単ですが、1 つの配列だけでこれを実行できるようにしたいと考えています。

たとえば、次のコードがあります。

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

このトレースの結果は次のとおりです。

827、ハリー、918、ジョン

私の質問は、次のように Array.sort() (または同様のもの) を使用するにはどうすればよいかということです。

d = 918、ジョン、827、ハリー

この例に固有のものではありません。つまり、カスタム名と動的スコアを操作する必要があります。

事前に乾杯!ハリー。

4

2 に答える 2

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);
}
于 2012-04-28T02:05:52.530 に答える
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

これがあなたの求めているものであることを願っています。

于 2012-04-28T02:28:00.240 に答える