У меня есть массив с именем alarmQueue. Я добавляю в него новые массивы с содержимым [часы: int, минуты: int, секунды: int], и я хотел бы использовать alarmQueue.sortOn () для сортировки очереди сигналов тревоги по возрастанию, но у меня проблемы с пониманием логики.
// 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 not будучи методом сортировки, я проверил liveocs и не нашел там упоминаний об этом. Есть еще предположения? </p>