arrays - ActionScript 自定义排序函数

标签 arrays actionscript-3 sorting

我正在尝试编写一个与 Array.sort() 一起使用的排序函数。不过,我对如何准确地编写我需要的内容有些困惑。

在我的应用程序中,项目在整个执行过程中的不同时间添加到此数组中,每次添加项目时,都会对数组进行排序。 Array 中的项目都是对象,并且都具有属性“weight”。如果重量较大,则该项目应先行,如果重量较小,则该项目应在后。这很简单,我有一个看起来像这样的函数:

return a.weight - b.weight;

问题是我有一个额外的要求,如果稍后添加一个项目并且它与另一个项目具有相同的重量,则它必须放在数组中的那个项目之后。它必须位于数组中已添加的具有相同权重的每个项目之后。

我在想出一个函数来确保每次都满足要求时遇到了麻烦。

感谢您的帮助!

最佳答案

无需编写自定义排序,Array 的 sortOn 可以处理这种情况。 但是,您需要为您的项目添加一个新成员,我将其称为“时间戳”。

arr.sortOn( [ 'weight', 'timestamp' ], [ Array.NUMERIC | Array.DESCENDING, Array.NUMERIC ] );

第一个参数定义哪些属性将用于排序,第二个参数定义每个字段的选项。参见 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sortOn()获取更多信息。 |-运算符(按位或运算符)用于为一个字段传递多个选项。 因此,在这种情况下,第一个字段(“重量”)按数字降序排序。

--编辑:

对于向量你需要使用一个比较函数:

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

关于arrays - ActionScript 自定义排序函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815370/

相关文章:

java,两个二维数组及其交互,ArrayIndexOutOfBounds Exception

c++ - 为什么我们可以删除数组,但不知道 C/C++ 中的长度?

actionscript-3 - 为什么删除事件监听器不起作用?

arrays - 多样化排序的算法

mysql - 复杂的 MySQL 排序

java - Apache Commons Lang 类 "add"的时间复杂度为 'ArrayUtils'

flash - 错误1136 : incorrect number of arguments. Expected 1

apache-flex - 清除 Flex ActionScript 字典

javascript - 对象中的项目为 'undefined' 的问题

php - 为什么我不能将任何变量分配给 pChart 中的函数返回值?