4

[NSArray filteredArrayUsingPredicate]パフォーマンスを向上させるために、取得するオブジェクトの配列を制限しようとしています。

私のコード:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.Name contains[c] %@", searchText]; 
NSArray *filteredArray = [self.dataArray filteredArrayUsingPredicate:predicate];

MydataArrayには約 30.000 個のオブジェクトが含まれており、結果の配列を 50 個に制限したいと考えています (50 個の一致が見つかった後にいくつかの break ステートメントが必要です)。どうすればこれを達成できますか?

4

2 に答える 2

5

単純なfor-inループ、NSMutableArrayビルダー、および-[NSPredicate evaluateWithObject:]メソッドを使用します。

NSMutableArray *builder = [NSMutableArray arrayWithCapacity:50];
for (id object in array) {
    if ([predicate evaluateWithObject:object]) {
        [builder addObject:object];
        if (builder.count >= 50) break;
    }
}

あなたが質問に のタグを付けたことに気付きましたCore Data。を使用できる場合は、 50NSFetchRequestに設定します。fetchLimit

于 2013-07-05T11:24:44.880 に答える
1

これはどう?

myArray = [originalArray filteredArrayUsingPredicate:myPredicate];

if ([myArray count] > resultLimit) {
        myArray = [myArray subarrayWithRange:NSMakeRange(0, resultLimit)];
}
于 2014-08-29T17:30:06.123 に答える