0

我有一个对象(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:- 1 个对象没有 TID neObj1.ipAddress="121.1.1.2"; neObj2.TID="RAPA" neObj2.ipAddress="121.1.1.1" O/P 排序后应该是 neObj1 neObj2

4

1 回答 1

0

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

我确实想指出,对字母和数字的组合进行排序是很棘手的,因为默认情况下没有自然顺序。例如,在对 1、2 和 11 进行排序时,顺序将为 1、11、2。但是,您可以使用AS3Commons Lang项目中的naturalCompare方法来解决这个问题。

这是您的案例的代码示例。排序实现为 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();
于 2013-07-05T12:00:56.973 回答