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

Arrays AS3:对数组进行降序排序,同时保持字符串的正确顺序,arrays,actionscript-3,Arrays,Actionscript 3,我不确定是否有一个简单的答案,但我假设没有,因此我在这里 基本上,我想运行一个非常简单的高分表,它跟踪游戏的高分,但也在每个分数旁边显示正确的名称 这一切都很简单,但我希望能够做到这一点,只有一个阵列 例如,我有以下代码: var d:Array; var e:Array; d = "827-Harry".split("-"); d.push("918-John".split("-")); trace(d) 正确地生成此跟踪: 827,哈利,918,约翰 我的问题是,如何使用Array.sor

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

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

这一切都很简单,但我希望能够做到这一点,只有一个阵列

例如,我有以下代码:

var d:Array;
var e:Array;
d = "827-Harry".split("-");
d.push("918-John".split("-"));
trace(d)
正确地生成此跟踪:

827,哈利,918,约翰

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

d=918,约翰,827,哈利

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

提前干杯!
Harry.

创建关联数组并使用:

var高分:数组=新数组();
高分。推(得分:827,球员:“约翰”});
高分。推(得分:918,玩家:“哈利”});
highscores.sortOn(“scores”,Array.DESCENDING | Array.NUMERIC);
对于(变量i:int=0;i
创建关联数组并使用:

var高分:数组=新数组();
高分。推(得分:827,球员:“约翰”});
高分。推(得分:918,玩家:“哈利”});
highscores.sortOn(“scores”,Array.DESCENDING | Array.NUMERIC);
对于(变量i:int=0;i
不建议您这样存储高分,但我不知道您的原因,所以下面就是您想要的方法

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;
}

希望这就是你想要的。

不建议你那样存储你的高分,但我不知道你的原因,所以这里有你想要的方法

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;
}

希望这就是您想要的。

没想到这会这么简单-奇怪的是,我以前从未见过这样使用数组。谢谢你给我展示了一些新东西:)没想到这会这么容易——奇怪的是,我以前从未见过这样使用数组。谢谢你给我展示了一些新的东西:)谢谢你的帮助-我可以问一下用这种方式排序数组有什么缺点吗?每次需要排序数组时,运行两个循环可能会占用大量处理器,具体取决于排序的分数。尽管今天的计算机以及AVM2(运行AS3代码的虚拟机)中的优化意味着您应该能够在没有任何明显影响的情况下对数千个分数进行排序。因此,如果这是你想要处理分数的方式,只要你不打算对数百万等进行排序,它就应该可以正常工作。1978年的解决方案的好处在于,你只存储和排序单个
数组
对象。好的,非常感谢您的详细回复:)我认为我的应用程序不会真正达到数千人,更不用说数百万人了,所以看起来我应该能够坚持这种方法:)再次干杯,伙计!感谢您的帮助-我可以问一下以这种方式排序数组有什么缺点吗?每次需要排序数组时,运行两个循环可能会占用大量处理器,具体取决于排序的分数。尽管今天的计算机以及AVM2(运行AS3代码的虚拟机)中的优化意味着您应该能够在没有任何明显影响的情况下对数千个分数进行排序。因此,如果这是你想要处理分数的方式,只要你不打算对数百万等进行排序,它就应该可以正常工作。1978年的解决方案的好处在于,你只存储和排序单个
数组
对象。好的,非常感谢您的详细回复:)我认为我的应用程序不会真正达到数千人,更不用说数百万人了,所以看起来我应该能够坚持这种方法:)再次干杯,伙计!
var arrUnsorted:Array = ["827", "Harry", "918", "John"];
var arrSorted:Array = sortArray(arrUnsorted);

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