2009-07-28 19 views
1

私は、100個のアイテムを表現するように制限したい配列コレクションを持っています。私はフィルタ関数を設定しようとしましたが、戻り値は:配列コレクションの値を制限する

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

ただし、値は常に-1です。アイテムが間違いなくあるにもかかわらず、何らかの理由でアイテムを見つけることができませんでした。私は、whileループでこれを行うことができるよ

しばらく(myAC.length> 100)myAC.removeItemAt(100);

私はこれを達成する別の方法がありますか?ありがとう!

答えて

4

うーん、私は考えることができる最善の方法は次のとおりです。もちろん

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

、あなたがArrayCollectionが最初に構築されたときに、それが良いだろう大きさを制御することができれば。

オブジェクトのsourceプロパティを直接操作することはできません。 sourceの文書からArrayCollection

ArrayCollectionのデータソース。 ArrayCollectionオブジェクトは、ソース配列に直接行った変更を表していません。常にICollectionViewまたはIListメソッドを使用してコレクションを変更します。

2

はこのような何か試してみてください:

myAc =新しいのArrayCollection(myAC.source.slice(0100))を、

は、コードのあなたの最初の行では、あなたの「>」である必要があります「<」このよう

1

まずテストしていません。あなたは、最初の100項目を残しておき、それらを投げ捨ててはいけません。配列コレクションをフィルタリングするときにgetItemIndexが変更されるため、フィルタリングが壊れている可能性があります。あなたは常に最初の部分を捨てているので、何もそこに入ることはできません。

わからないが、それは、私は、オプションのコンパイラー引数として制限を取るLimitedArrayCollectionというクラスであるArrayCollectionを包むだろう開始

0

です。次に、この種の機能に影響を与える適切なパブリックメソッド(addItemなど)をオーバーライドします。これは、開発と再利用の観点からはるかにクリーンなものになるでしょう。フィルターやその他の巧妙なアプローチを使用しようとすると、必然的に直面する曖昧さが取り除かれます。

関連する問題