NSPredicate常规搜索

时间:2012-04-23 09:25:08

标签: ios nspredicate

当我们搜索任何应用时,我正在使用NSPredicate来执行搜索,就像在iPhone上一样。

我已经说过例如4个关键字

  1. 德干
  2. 新德里
  3. 艾哈默德巴德
  4. Salaam Delhi
  5. 我尝试使用

    创建谓词

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'" 它给了我 Deccan 作为输出。 但问题是我希望每个单词都以 d 开头。所以从上面的例子我需要输出为 德干,新德里,萨拉姆德里不是艾哈迈达巴德

    从小时开始就陷入了这个问题。尝试包含,匹配,但我的运气不好..

    任何对正确道路的帮助都将受到赞赏..

3 个答案:

答案 0 :(得分:13)

谢谢大家的回复 这是我想出来的

NSString *matchString =  [NSString stringWithFormat: @".*\\b%@.*",searchText];
NSString *predicateString = @"keyword MATCHES[c] %@";
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString];

答案 1 :(得分:1)

你有两种方式

  1. 将操纵除以''并使用您的NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
  2. 或者,更好的方法是使用两个谓词:
  3. predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd' OR keyword contains[c] ' d'"] // i mean,'space+d'

    所以你会满足两种可能的情况。

答案 2 :(得分:0)

考虑“喜欢”和“匹配”。但请注意,这些操作相对较为昂贵,并且在大型数据集上可能需要相当长的时间。

在这个例子中,我假设你想要的是匹配,如果任何以空格分隔的单词以“d”开头

这会检查关键字是以“d”开头还是具有a后跟“d”的序列

[NSPredicate predicateWithFormat:@"(keyword BEGINSWITH[c] 'd') OR (keyword LIKE[c] '* d')"]

这个使用正则表达式,非常相似(使用最适合您情况的正则表达式:

[NSPredicate predicateWithFormat:@"keyword MATCHES[c] '^d.*|.*\\sd.*'"]