【问题标题】:Filtering an array with a predicate, limit results?用谓词过滤数组,限制结果?
【发布时间】:2012-10-10 13:45:41
【问题描述】:

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

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

【问题讨论】:

  • 您是否真的遇到了内存数据过滤的性能问题?
  • @DavidRönnqvist 我的过滤计算量很大,因此处理许多对象的成本很高。

标签: ios arrays nsarray nspredicate array-filter


【解决方案1】:

我认为您可以使用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];

【讨论】:

  • 是的,这是一个可能的解决方案,谢谢。我可以使用evaluateWithObject: 来测试对象。我更喜欢更优雅的方法,但如果没有其他方法,我将使用*PassingTest: 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2014-01-11
  • 2015-04-07
相关资源
最近更新 更多