我有两个数组,我必须在上面进行通配符搜索,我正在使用 IN 运算符,但 IN 运算符给了我完全匹配,但我想获取包含 searchTerm 的所有结果。这是否可以通过 IN 运算符,或者我是否必须手动遍历所有记录并匹配选择我想要的记录。
当前代码 :
NSArray *filteredArray = [brandsFabric filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.color_name IN %@ OR self.subcategory_name IN %@",colorNamesArray,patternNamesArray]];
所需的功能如下所示:
NSArray *filteredArray = [brandsFabric filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.color_name IN like/contains %@ OR self.subcategory_name IN like/contains %@",colorNamesArray,patternNamesArray]];
这是一个非常昂贵的操作,但您可以尝试:
NSMutableArray *predicates = [NSMutableArray array];
for (NSString *name in colorNames) {
[predicates addObject:[NSPredicate predicateWithFormat:
@"color_name CONTAINS[cd] %@", name]];
}
for (NSString *name in subcategoryNames) {
[predicates addObject:[NSPredicate predicateWithFormat:
@"subcategory_name CONTAINS[cd] %@", name]];
}
NSPredicate *final = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];
也许这里甚至有一个子查询。(实验性)
[NSPredicate predicateWithFormat:
@"((SUBQUERY(%@, $x, color_name CONTAINS[cd] $x).@count != 0) OR "
@"((SUBQUERY(%@, $x, category_name CONTAINS[cd] $x).@count != 0)",
colorNames, categoryNames];
它是这样的:CONTAINS[cd] %@
代替IN