Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3索顿悲剧_Actionscript 3_Sorting - Fatal编程技术网

Actionscript 3 AS3索顿悲剧

Actionscript 3 AS3索顿悲剧,actionscript-3,sorting,Actionscript 3,Sorting,我有一个名为alarmQueue的数组。我正在将一个新的数组与内容[hours:int,minutes:int,seconds: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):v

我有一个名为alarmQueue的数组。我正在将一个新的数组与内容[hours:int,minutes:int,seconds: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); } } alarmQueue.push( { 小时:_小时, 分钟:_分钟, 秒:_秒 }); 索顿先生( [‘小时’、‘分钟’、‘秒’], [Array.NUMERIC | Array.升序,Array.NUMERIC | Array.升序,Array.NUMERIC | Array.升序] ); 如果(alarmQueue.length==3) { 对于(变量i:int=0;i小于alarmQueue.length;i++) { 跟踪(alarmQueue[i]。小时,alarmQueue[i]。分钟,alarmQueue[i]。秒); } }
我不得不稍微更改跟踪,因为数组项现在是对象,并且使用了SMALLERTHAN,因为这应该行得通,但我还没有测试过

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

经过一番修补后找到了答案。默认的排序方法是升序,但没有将升序设置为辅助排序方法的选项。因此,通过执行两种排序,第一种是按分钟和秒递减,第二种是按小时排序,没有应用任何参数,因此它按升序排序

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); } var alarmAsArray:Array=新阵列(_小时,_分钟,_秒); alarmQueue.push(alarmAsArray); alarmQueue.sortOn([1,2]); alarmQueue.sortOn([0],Array.DESCENDING); 如果(alarmQueue.length==3) { 跟踪(报警队列); } 这将给出正确的输出:12,1,19 12,1,21 1,0,31

非常感谢大家!
ant

为什么将第二个参数括在方括号中?指定要将Array.NUMERIC和Array.singressing应用于每个字段名?您测试过这个吗?因为livedocs没有说能够为不同的字段传递不同的排序选项,所以我相信
Array.NUMERIC | Array.ASCENDING
将足够于livedocs:注意:fieldName和options数组必须具有相同数量的元素;否则,将忽略选项数组。此外,Array.UNIQUESORT和Array.RETURNINDEXEDARRAY选项只能用作数组中的第一个元素;否则,它们将被忽略。为什么它是
[0,1,2]
而不是
[0,1,2]
?你想要降序排序,这就是你得到的。对吗?