8

当我们搜索任何应用程序时,我正在使用 NSPredicate 来执行搜索,就像它在 iPhone 上所做的那样。

例如,我说 4 个关键字

  1. 德干
  2. 新德里
  3. 艾哈迈达巴德
  4. 萨拉姆德里

我试过用

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

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

任何对正确道路的帮助将不胜感激..

4

3 回答 3

13

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

NSString *matchString =  [NSString stringWithFormat: @".*\\b%@.*",searchText];
NSString *predicateString = @"keyword MATCHES[c] %@";
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString];
于 2012-04-23T10:23:39.807 回答
1

有两种方法适合你

  1. 将 steing 除以 ' ' 并使用你的NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
  2. 或者,更好的方法是使用两个谓词:

predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd' OR keyword contains[c] ' d'"]//i mean,'space+d'

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

于 2012-04-23T10:07:03.623 回答
0

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

在此示例中,我假设您想要匹配的任何空格分隔的单词都以“d”开头

这将检查关键字是否以 'd' 开头或具有一个后跟 'd' 的序列

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

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

[NSPredicate predicateWithFormat:@"keyword MATCHES[c] '^d.*|.*\\sd.*'"]
于 2012-04-23T10:20:15.350 回答