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

时间:2015-06-12 15:23:13

标签: ios objective-c search nsstring nspredicate

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

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"comment.text CONTAINS [cd] %@ ",_searchQuery];
NSArray *result = [_sourceArray filteredArrayUsingPredicate:predicate];

如何扩展谓词以使用多个单词进行搜索查询并返回包含查询中所有单词的结果?

例如:

  • 搜索“苹果和橘子是水果”的文字
  • 查询:“apple fruit”
  • 当前谓词与此查询不匹配。
  • 如何修改谓词以匹配要搜索到该查询的文本?

2 个答案:

答案 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建议的那样。