ActionScript自定义排序功能

use*_*171 2 arrays sorting actionscript-3

我正在尝试编写一个与Array.sort()一起使用的sort函数.我有点困惑于如何能够准确地写出我需要的东西.

在我的应用程序项目中,在整个执行过程中的不同时间将项目添加到此数组中,并且每次添加项目时,都会对数组进行排序.Array中的项目都是对象,并且都具有属性"weight".如果重量较大,则该项目应该先行,如果该项目应该更少.这很容易,我有一个看起来像这样的功能:

return a.weight - b.weight;
Run Code Online (Sandbox Code Playgroud)

问题是我有一个额外的要求,如果一个项目以后添加,并且它具有与另一个项目相同的权重,它必须放在数组中的该项目之后.它必须在已经添加的具有相同权重的阵列中的每个项目后面.

我无法想出能够确保每次都满足要求的功能.

谢谢您的帮助!

Cre*_*ers 5

无需编写自定义排序,Array sortOn可以处理这种情况.但是,您需要在商品中添加新会员,我将其称为"时间戳".

arr.sortOn( [ 'weight', 'timestamp' ], [ Array.NUMERIC | Array.DESCENDING, Array.NUMERIC ] );
Run Code Online (Sandbox Code Playgroud)

第一个参数定义将用于排序的属性,第二个参数定义每个字段的选项.有关详细信息,请参阅http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sortOn().| -operator(按位OR运算符)用于为一个字段传递多个选项.因此,在这种情况下,第一个字段("权重")按数字顺序排序.

- 编辑:

对于矢量,您需要使用比较功能:

var sortFunc : Function = function (x: <T>, y : <T>):Number{
    var dw:Number = y.weight - x.weight
    if( dw ==0 ){
        //returns negative if y was added later
        return x.timestamp - y.timestamp;
    }else{
        //returns negative if x has a higher weight
        return dw;
    }
}
vec.sort( sortFunc );
Run Code Online (Sandbox Code Playgroud)