iOS Objective-C 如何使用谓词在字符串数组中搜索多个非连续关键字?

标签 ios objective-c search nsstring nspredicate

我正在使用以下代码搜索数组,返回包含部分搜索查询的项目。当搜索查询是单个词或词的一部分时,这很有效:

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/

相关文章:

ios 驻留菜单管理左右菜单内容

objective-c - 如何为 QuickLook 插件开发/创建 GUI?

objective-c - 如何禁用 UITextView 上的键盘?

search - 使用sed查找模式,打印行直到第一个空行

algorithm - 修改 A* 以在矩形网格上找到最接近多个目标的路径

ios - 如何创建抽象函数以减少代码重复

ios - 非视网膜 iPad 上的图像看起来模糊

ios - 如何停止在我的 iOS 应用程序中使用定位服务?

objective-c - 分配给属性(property)会导致保留吗?

Java 查找和替换文本