述語を持つ多くのオブジェクトを持つことができる配列をフィルタリングしています。パフォーマンス上の理由から、返される結果を制限したいと思います。配列がソートされていないので、限界に達したら検索を止めてほしい。
これは可能ですか?述語ディレクティブによるものか、それ以外によるものかはわかりません。
述語を持つ多くのオブジェクトを持つことができる配列をフィルタリングしています。パフォーマンス上の理由から、返される結果を制限したいと思います。配列がソートされていないので、限界に達したら検索を止めてほしい。
これは可能ですか?述語ディレクティブによるものか、それ以外によるものかはわかりません。
indexesOfObjectsPassingTest
と のこの組み合わせを使用できると思いますobjectsAtIndexes
:
NSUInteger count = 0;
NSUInteger limit = ...;
NSIndexSet *set = [myArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
BOOL pass = ... // check if object passes test;
if (pass) {
count++;
if (count >= limit)
*stop = YES; // stops further processing of the array
}
return pass;
}];
NSArray *filteredArray = [myArray objectsAtIndexes:set];