我正在使用以下代码搜索数组,返回包含搜索查询部分的项目。当搜索查询是单个单词或单词的一部分时,这很有效:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"comment.text CONTAINS [cd] %@ ",_searchQuery];
NSArray *result = [_sourceArray filteredArrayUsingPredicate:predicate];
如何扩展谓词以使用多个单词进行搜索查询并返回包含查询中所有单词的结果?
例如:
答案 0 :(得分:1)
以下代码列举TextArea
为每个单词创建谓词的单词,然后使用_searchQuery
将它们组合成NSCompoundPredicate
:
AND
答案 1 :(得分:1)
如果关键字的顺序对您很重要,您可以使用正则表达式来完成工作:
NSArray *const source = @[@"apples and oranges are fruits"];
static NSString *const separator = @".*";
NSArray *const keywords = @[@"apples", @"oranges"];
NSString *const pattern = [NSString stringWithFormat:@"%@%@%@", separator, [keywords componentsJoinedByString:separator], separator];
NSPredicate *const predicate = [NSPredicate predicateWithFormat:@"self MATCHES %@", pattern];
NSArray *const filtered = [source filteredArrayUsingPredicate:predicate];
否则你可以OR
一起CONTAINS
一起{@ 1}},就像@Larme建议的那样。