AS3排序很难

时间:2009-11-19 11:50:17

标签: actionscript-3 sorting

我有一个名为alarmQueue的数组。我正在使用内容[hours:int,minutes:int,seconds:int]推送一个新的数组,我想使用alarmQueue.sortOn()对报警队列进行排序Ascending但我有让我了解逻辑的问题。

// the function to push the alarm in to a queue
public function setAlarm(_hours:int = 0, _minutes:int = 0, _seconds:int = 0):void
{
    var alarmAsArray:Array = new Array(_hours, _minutes, _seconds);
    alarmQueue.push(alarmAsArray);

    alarmQueue.sortOn([0, [1, 2]], Array.NUMERIC | Array.DESCENDING);
    trace(alarmQueue);
}

我正在设置这些警报:

clock.setAlarm(1, 0, 31);  // alarm 1
clock.setAlarm(12, 1, 21); // alarm 2
clock.setAlarm(12, 1, 19); // alarm 3

并获得以下痕迹:

1,0,31
12,1,21,1,0,31
12,1,21,12,1,19,1,0,31

我似乎将它们命名为:闹钟2,闹钟3,闹钟1 但是我希望按小时,分钟和秒来订购它们。

任何人都可以解释我的排序问题吗? 干杯!


感谢您的反馈。

我测试过了:

alarmQueue.push(
            {
                hours: _hours,
                minutes: _minutes,
                seconds: _seconds
            });

            alarmQueue.sortOn(
                ['hours', 'minutes', 'seconds'],
                [Array.NUMERIC | Array.ASCENDING, Array.NUMERIC | Array.ASCENDING, Array.NUMERIC | Array.ASCENDING]
            );

            if(alarmQueue.length == 3)
            {
                for(var i:int = 0; i SMALLERTHAN alarmQueue.length; i++)
                {
                    trace(alarmQueue[i].hours,alarmQueue[i].minutes, alarmQueue[i].seconds);
                }
            }

由于数组项目现在是对象,我不得不稍微改变跟踪,并使用SMALLERTHAN作为<符号似乎在这里打破代码标签,但是应用程序无法编译,因为Flex Builder告诉我Array.ASCENDING不是一种排序方法,所以我检查了liveocs并且在那里也没有提到它。还有其他猜测吗?

2 个答案:

答案 0 :(得分:1)

这应该有用,但我没有测试过。

public function setAlarm(_hours:int = 0, _minutes:int = 0, _seconds:int = 0):void
{    
  alarmQueue.push(
  {
    hours: _hours,
    minutes: _minutes,
    seconds: _seconds
  });

  alarmQueue.sortOn(['hours', 'minutes', 'seconds'], Array.NUMERIC);
}

答案 1 :(得分:1)

经过一些修补后找到答案。排序的默认方法是升序,但没有选项将Ascending设置为secondry排序方法。所以通过执行两种排序,第一种是在分钟和秒上下降,第二种是排序,没有应用参数的小时,所以它按升序排序!

var alarmAsArray:Array = new Array(_hours, _minutes, _seconds);
            alarmQueue.push(alarmAsArray);

            alarmQueue.sortOn([1, 2]);
            alarmQueue.sortOn([0], Array.DESCENDING);

            if(alarmQueue.length == 3)
            {
                trace(alarmQueue);
            }

这给出了正确的输出:12,1,19 12,1,21 1,0,31

非常感谢大家! 蚂蚁