NSPredicate限制结果

OzB*_*Boz 4 iphone core-data objective-c ios

我试图限制对象数组,以[NSArray filteredArrayUsingPredicate]获得更好的性能.

我的代码:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.Name contains[c] %@", searchText]; 
NSArray *filteredArray = [self.dataArray filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

dataArray包含大约30.000个对象,我想限制结果数组50.(我发现50匹配后我需要一些break语句.)我怎样才能实现这个目标?

Tri*_*ops 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我注意到你标记了这个问题Core Data.如果你可以使用NSFetchRequest,那么只需将其设置fetchLimit为50.

  • 使用Core Data,你可以用**两种方式获取对象**:首先是**获取请求**(这里显然是**设置获取限制**),第二种是**遍历对象图**通过调用关系getter(比如`user.followers`,或者左右)这里最好只是**在循环**中过滤它.所以它取决于你已经拥有的东西,但是如果阵列那么大,你可以尝试两种变体并看到性能差异.执行获取请求可能需要更复杂的谓词. (2认同)