限制数组集合中的值

时间:2009-07-28 13:17:38

标签: flex actionscript-3

我有一个数组集合,我想限制说100项。我尝试设置过滤函数,返回值为:

return(myAC.getItemIndex(item)> 100);

但值始终为-1。无论出于何种原因,它都找不到该项目,即使该项目肯定存在。

我可以用while循环执行此操作:

while(myAC.length> 100)myAC.removeItemAt(100);

还有其他方法可以实现这一目标吗?谢谢!

4 个答案:

答案 0 :(得分:4)

嗯,我能想到的最好方法是:

myAC = new ArrayCollection( myAC.toArray().slice(0,100) );

当然,如果您可以在首次构建ArrayCollection时控制大小,那会更好。

请注意,您无法直接操作对象的source属性。来自source的{​​{1}}属性的文档:

  

ArrayCollection中的数据源。 ArrayCollection对象不表示您直接对源数组所做的任何更改。始终使用ICollectionView或IList方法来修改集合。

答案 1 :(得分:2)

尝试这样的事情:

myAc = new ArrayCollection(myAC.source.slice(0,100));

没有测试这个

答案 2 :(得分:1)

首先,你的“>”应该是“<”在你的第一行代码中。你想要保留前100个项目,而不是把它们扔掉。我敢打赌过滤是破坏的,因为getItemIndex在过滤数组集合时会发生变化。既然你总是丢弃起始部分,那么就什么都不可能。

不确定,但这是一个开始

答案 3 :(得分:0)

我会将ArrayCollection包装在一个名为LimitedArrayCollection的类中,该类将限制作为可选的编译器参数。然后覆盖会影响此类功能的相应公共方法(addItem等)。从开发和重用的角度来看,这将变得更加清晰。它将消除您在尝试使用过滤器或其他聪明方法时不可避免会遇到的任何歧义。