我有一个ArrayCollection
用作列表的数据提供者。
该集合存储类型的对象MyObject
:
public class MyObject {
public var myMap:Dictionary;
}
myMap
存储键值对,键是 an integer
,值是字符串。
到目前为止的约束。我现在要做的是根据地图的字段对集合进行排序。
使用我自己ArrayCollection
的函数确实有效。这就是我实现它的方式:sort
compareFunction
var key:int = 15;
var sort:Sort = new Sort();
sort.compareFunction = fidSort;
myCollection.sort = sort;
myCollection.refresh();
private function fidSort(a:Object, b:Object, fields:Array = null):int {
if(a.myMap[key].fieldValue == b.myMap[key].fieldValue) {
return 0;
} else if(a.myMap[key].fieldValue > b.myMap[key].fieldValue) {
return 1;
} else{
return -1;
}
}
正如我所说,这确实是为了排序。然而,排序(作为集合的一个属性)自然会保留在集合中,除非特别从其中删除,这意味着每次映射中的值MyObject
发生变化时,它将根据比较函数进行排序。
我需要的是只应用一次排序,之后地图值发生的事情不应该改变集合排序。
我已经尝试过禁用colleciton上的自动更新之类的东西(自然这将不起作用,因为集合不再获得任何更新(确实如此,但它们仅被缓存))。之后,我阅读了这篇关于对底层数组进行排序的文章。但是,这似乎不适用于地图,因为我确实收到一个编译错误,说myMap[key].fieldValue
在MyObject
.
所以,是的,我在这里有点迷失在太空中。如果有人知道如何实现这一点,非常基本的任务,请告诉我。
干杯!