我有一个名为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并且在那里也没有提到它。还有其他猜测吗?
答案 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
非常感谢大家! 蚂蚁