对于同步服务,我正在尝试使用谓词尽量减少循环。
我目前有这样的事情:
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/