从NSPredicate中的数组简化字符串检查

从NSPredicate中的数组简化字符串检查

对于同步服务,我正在尝试使用谓词尽量减少循环。

我目前有这样的事情:

for (NSString *filterOutPath in toFilterOutPaths) {
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"NOT (href CONTAINS %@)", filterOutPath];
    toUpdateFiles = [toUpdateFiles filteredArrayUsingPredicate:pred];
}


我的目标是这样的:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"NOT (href CONTAINS (ANY IN %@))", toFilterOutPaths];
toUpdateFiles = [toUpdateFiles filteredArrayUsingPredicate:pred];


有任何想法吗?非常感谢您所做的任何贡献!

最佳答案

首先,为什么要消除循环?您认为它将运行得更快吗?如果是这样,为什么?运行多个简单谓词可能与运行一个复杂谓词一样快。

其次,您不能以建议的方式组合CONTAINS,ANY和IN。相反,您可以创建一个复合谓词,如下所示:

NSMutableArray *predicates = [NSMutableArray arrayWithCapacity:toFilterOutPaths.count];

for (NSString *filterOutPath in toFilterOutPaths) {
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"NOT (href CONTAINS %@)", filterOutPath];
    [predicates addObject:predicate];
}

NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];

toUpdateFiles = [toUpdateFiles filteredArrayUsingPredicate:compoundPredicate];

关于objective-c - 从NSPredicate中的数组简化字符串检查,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7908030/

10-11 06:17