我不确定是否有一个简单的答案,但我假设没有,因此我在这里。
基本上,我想运行一个非常简单的高分表来跟踪游戏的高分,但也会在每个分数旁边显示正确的名称。
这很简单,但我希望能够只用一个数组来完成。
例如,我有这段代码:
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
它不能特定于此示例。也就是说,它需要使用自定义名称和动态分数。
提前干杯! 哈利。
答案 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
希望这就是你所追求的目标。