我正在使用以下代码搜索数组,返回包含部分搜索查询的项目。当搜索查询是单个词或词的一部分时,这很有效:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"comment.text CONTAINS [cd] %@ ",_searchQuery];
NSArray *result = [_sourceArray filteredArrayUsingPredicate:predicate];
如何扩展我的谓词以接受包含多个词的搜索查询并返回包含查询中所有词的结果?
例如:
- 搜索“apples and oranges are fruits”的文本
- 查询:“苹果水果”
- 当前谓词不会将此查询与文本匹配。
- 如何修改谓词以将要搜索的文本与该查询相匹配?
最佳答案
下面的代码列举了 _searchQuery
中的单词,为每个单词创建一个谓词,然后使用 AND
将它们组合成一个 NSCompoundPredicate
:
NSMutableArray *subpredicates = [NSMutableArray new];
[_searchQuery enumerateSubstringsInRange:NSMakeRange(0, _searchQuery.length)
options:NSStringEnumerationByWords
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
NSPredicate *subpredicate = [NSPredicate predicateWithFormat:@"comment.text CONTAINS [cd] %@ ",substring];
[subpredicates addObject:subpredicate];
}];
NSCompoundPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];
NSArray *result = [_sourceArray filteredArrayUsingPredicate:compoundPredicate];
关于iOS Objective-C 如何使用谓词在字符串数组中搜索多个非连续关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30806742/