AS3:对数组进行降序排序,同时保持字符串的顺序正确

时间:2012-04-28 01:37:34

标签: arrays actionscript-3

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

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

这很简单,但我希望能够只用一个数组来完成。

例如,我有这段代码:

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

这正确地导致了这种痕迹:

827,哈利,918,约翰

我的问题是,我如何以产生以下内容的方式使用Array.sort()(或类似的):

d = 918,John,827,Harry

它不能特定于此示例。也就是说,它需要使用自定义名称和动态分数。

提前干杯! 哈利。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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

希望这就是你所追求的目标。