使用谓词过滤数组,限制结果?

时间:2012-10-10 13:45:42

标签: ios arrays nsarray nspredicate array-filter

我正在过滤一个可以包含许多具有谓词的对象的数组。我想限制因性能原因返回的结果。数组没有排序,所以一旦达到限制,我希望搜索停止。

这可能吗?我不确定是否通过谓词指令或其他方式。

1 个答案:

答案 0 :(得分:2)

我认为您可以使用indexesOfObjectsPassingTestobjectsAtIndexes的这种组合:

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];