我有两个数组,我必须在其中进行通配符搜索,我使用的是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]];
答案 0 :(得分:1)
这是一项非常昂贵的操作,但您可以尝试:
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];
答案 1 :(得分:0)
它是这样的:CONTAINS[cd] %@
代替IN