【问题标题】:Actionscript 3.0 - Sort an array of instances by their properties?Actionscript 3.0 - 按属性对实例数组进行排序?
【发布时间】:2015-02-24 08:34:02
【问题描述】:

我有一个数组,其中包含类实例。 这些类实例有几个属性。 假设我想按每个实例的 name 属性对该数组进行排序。

public class Thing
{

    public var name:String;

    public function Thing(name:String)
    {
         this.name = name;
    }
}

这是数组的样子:

var ar:Array = new Array(new Thing("Apple"), new Thing("Compass"), 
                         new Thing("Banana"), new Thing("Alligator"));

在对它进行排序并遍历它以跟踪每个实例的 name 属性后,它应该输出如下: 鳄鱼、苹果、香蕉、指南针

【问题讨论】:

    标签: arrays class sorting actionscript instances


    【解决方案1】:

    你可以排序

    ar.sortOn(属性, 选项);

    在您的情况下,属性为“名称”,选项为 ARRAY.ASCENDING

    PS:我没试过,不过试试看:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html#sortOn()

    【讨论】:

      【解决方案2】:

      sortOn 应该可以工作,或者你可以通过你自己的自定义排序函数来传递它:

      private function _sortArray( a:Thing, b:Thing ):int
      {
          if ( a.name < b.name )
              return -1; // a goes before b
          else if ( a.name > b.name )
              return 1; // b goes before a
          return 0; // order doesn't matter
      }
      

      然后您可以通过以下方式调用它:

      ar.sort( _sortArray );
      

      排序函数采用存储在数组中的类型的两个参数(在您的情况下为Thing),如果a 应该在b 之前,则返回-1,如果是>= 1 b 应该在a 之前,或者0 如果顺序无关紧要(即名称相同)。你可以比较几乎任何东西来获得你想要的排序。例如,要获得随机排序:

      private function _sortArray( a:Thing, b:Thing ):int
      {
          if ( Math.random() < 0.5 )
              return -1;
          return 1;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-12
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多