【问题标题】:AS3 sortOn woesAS3 排序问题
【发布时间】:2009-11-19 11:50:17
【问题描述】:

我有一个名为 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 但我想按小时、分和秒排序。

谁能解释我的分类问题? 干杯!


感谢您的反馈。

我已经测试过了:

警报队列.push( { 小时:_小时, 分钟:_分钟, 秒:_seconds }); 警报队列.sortOn( ['小时','分钟','秒'], [数组.NUMERIC |数组.ASCENDING,数组.NUMERIC |数组.ASCENDING,数组.NUMERIC | Array.ASCENDING] ); 如果(警报队列长度 == 3) { for(var i:int = 0; i SMALLERTHAN alarmQueue.length; i++) { 跟踪(alarmQueue[i].hours,alarmQueue[i].minutes,alarmQueue[i].seconds); } }

由于数组项现在是对象,我不得不稍微更改跟踪,并使用 SMALLERTHAN 因为

【问题讨论】:

  • 为什么是[0, [1, 2]] 而不是[0, 1, 2]?你想要降序排序,这就是你得到的。对吗?

标签: actionscript-3 sorting


【解决方案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);
}

【讨论】:

  • 为什么第二个参数用方括号括起来?
  • 要指定您希望将 Array.NUMERIC 和 Array.ASCENDING 应用于每个字段名?
  • 你测试过这个吗?因为 livedocs 没有说明能够为不同的字段传递不同的排序选项livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/…
  • 我相信Array.NUMERIC | Array.ASCENDING 就足够了
  • 来自 livedocs:注意:fieldName 和 options 数组必须具有相同数量的元素;否则,选项数组将被忽略。此外,Array.UNIQUESORT 和 Array.RETURNINDEXEDARRAY 选项只能用作数组中的第一个元素;否则,它们将被忽略。
【解决方案2】:

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

var alarmAsArray:Array = new Array(_hours, _minutes, _seconds); alarmQueue.push(alarmAsArray); alarmQueue.sortOn([1, 2]); alarmQueue.sortOn([0], Array.DESCENDING); 如果(警报队列长度 == 3) { 跟踪(警报队列); }

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

非常感谢大家! 蚂蚁

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    相关资源
    最近更新 更多