利用ArrayCollection的sort属性
- <?xml version="1.0"?encoding="utf-8"?>??
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute">??
- ???? <mx:Script>??
- ???????? <![CDATA[??
- ????????????import?mx.collections.SortField;??
- ????????????import?mx.collections.Sort;??
- ????????????import?mx.collections.ArrayCollection;??
- ????????????private?var acSort:ArrayCollection=??
- ????????????newArrayCollection([{id:0,userName:"zhangSan",age:21},??
- ???????????????????????????????? {id:2,userName:"liSi",0)">24},0)">1,userName:"wangWu",0)">31}]);??
- ??????????????
- ????????????private?function sortAc():ArrayCollection{??
- ???????????????? var sort:Sort=new?Sort();??
- ??????????????????
- ???????????????? sort.fields=[new?SortField("id")];??
- ??????????????????
- ??????????????????
- ???????????????? sort.fields=[new?SortField("userName",true,true)];??
- ??????????????????
- ???????????????? sort.fields[new?SortField("id"),new?SortField("userName",255)">???????????????? acSort.sort=sort;??
- ???????????????? acSort.refresh();??
- ????????????????return?acSort;??
- ???????????? }??
- ???????????
- ???????? ]]>??
- ???? </mx:Script>??
-
</mx:Application>?
?
?
?
?
?
?
因为数组可被多个SortFields 排序,Sort 对象的fields 属性就是一个数组。这些sort 创建一
个层级的结构,所有对象进行分组排序,先根据field 属性里的第一个SortField 对象,再第
一个,以此类推。这个例子代码先根据regions 再states 对集合进行排序:
?
coll = new ArrayCollection{[{city:"Cleveland",state:"Ohio",region:"East"},{city:"Sacramento",state:"California",region:"West"},{city:"Atlanta",state:"Georgia",region:"South"},{city:"Columbus",region:"East"}]);
var sort:Sort = new Sort();
sort.fields = [new SortField("region"),new SortField("state")];
coll.sort = sort;
coll.refresh();
?
?
对集合的日期类型数据进行排序,使用mx.utils.ObjectUtil 类的dateCompare 方法比较日期。
ObjectUtil 类提供一个dateCompare 方法用于检测两个Date 对象哪个更早。你可以用
ObjectUtil.dateCompare 方法来比较两个日期的大小。dateCompare 方法返回1,或
-1:如果值为null 或相等返回0,如果第一个值为null 或小于第二个值返回1,如果第二个值
为null 或小于第一个值返回-1:
?
import mx.collections.Sort;?
import mx.collections.ArrayCollection;?
import mx.utils.ObjectUtil;?
private function sortFunction(a:Object,b:Object,fields:Array = null):int?
{?
var tempDateA:Date = new Date(Date.parse(a.dob));?
var tempDateB:Date = new Date(Date.parse(b.dob));?
return ObjectUtil.dateCompare(tempDateA,tempDateB);?
}?
private var arrColl:ArrayCollection; private function init():void?
arrColl = new ArrayCollection([{name:"Josh",dob:"08/17/1983"},{name:"John",dob:"07/30/1946"},dob:"07/30/1990"},dob:"07/30/1986"}]);?
var sort:Sort = new Sort();?
sort.compareFunction = sortFunction;?
arrColl.sort = sort;?
arrColl.refresh();?
trace(arrColl);
}