0

我不确定是否有一个简单的答案,但我假设没有,因此我在这里。

基本上,我想运行一个非常简单的高分表,它记录游戏的高分,但也在每个分数旁边显示正确的名称。

这一切都很容易,但我希望能够只用一个数组来做到这一点。

例如,我有这个代码:

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 回答