gpt4 book ai didi

objective-c - 简化 NSPredicate 中数组的字符串检查

转载 作者:行者123 更新时间:2023-11-28 23:12:10 25 4
gpt4 key购买 nike

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

我目前有这样的东西:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com