在ArrayCollection上进行Flex排序

时间:2013-07-04 16:06:11

标签: flex

我有一个Objects(neObj)的ArrayCollection(neList)。每个neObj都有几个字段,如ipAddress,TID等。在大多数情况下neObj将具有TID和ipAddress的值,很少它不会有TID但有ipAddress ...添加对象(neObj)后,我需要排序ArrayCollection,其行为必须类似于array.sort(),它只有字符串..(即nos首先按字母顺序后跟字符串)

我尝试过的事情: 1)使用neList.source.sort()和neList.refresh ..但它不起作用,因为neList.source有对象不像字符串那样直接的东西 2)我认为我不能使用ArrayCollection的sortOn函数,因为它只能在1个字段上完成

我的要求: 使用案例1: - ArrayCollection中的对象同时具有TID和IP neObj1.TID =“RAPC”neObj1.ipAddress =“121.1.1.2”; neObj2.TID =“RAPA”neObj2.ipAddress =“121.1.1.1” 排序后的O / P应该是 neObj2 neObj1

使用案例2: - 其中一个对象没有TID neObj1.ipAddress = “121.1.1.2”; neObj2.TID =“RAPA”neObj2.ipAddress =“121.1.1.1” 排序后的O / P应该是 neObj1 neObj2

1 个答案:

答案 0 :(得分:0)

正如评论中暗示的那样,您需要使用sort compareFunction来决定如何对项目进行排序。

我想指出,在默认情况下没有自然顺序的意义上,排序字母和数字的组合是棘手的。例如排序时,1,2和11,顺序将为1,11,2。但是,您可以使用naturalCompare项目中的AS3Commons Lang方法解决此问题。

这是您的案例的代码示例。排序是作为Sort类的子类实现的,因此您可以轻松地在其他集合中重用它:

package {

import mx.collections.Sort;

import org.as3commons.lang.StringUtils;

public class NaturalSort extends Sort {

  public function NaturalSort() {
    compareFunction = function (a:Object, b:Object, fields:Array = null):int {
      var stringA:String = (("TID" in a) ? a.TID : "AAAA") + a.ipAddress;
      var stringB:String = (("TID" in b) ? b.TID : "AAAA") + b.ipAddress;
      return StringUtils.naturalCompare(stringA, stringB);
    };
  }
}
}

申请:

var collection:ArrayCollection;
collection.sort = new NaturalSort();
collection.refresh();