当我们搜索任何应用时,我正在使用NSPredicate来执行搜索,就像在iPhone上一样。
我已经说过例如4个关键字
我尝试使用
创建谓词 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"
它给了我 Deccan 作为输出。
但问题是我希望每个单词都以 d 开头。所以从上面的例子我需要输出为
德干,新德里,萨拉姆德里但不是艾哈迈达巴德
从小时开始就陷入了这个问题。尝试包含,匹配,但我的运气不好..
任何对正确道路的帮助都将受到赞赏..
答案 0 :(得分:13)
谢谢大家的回复 这是我想出来的
NSString *matchString = [NSString stringWithFormat: @".*\\b%@.*",searchText];
NSString *predicateString = @"keyword MATCHES[c] %@";
NSPredicate *predicate =[NSPredicate predicateWithFormat: predicateString, matchString];
答案 1 :(得分:1)
你有两种方式
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keyword BEGINSWITH[c] 'd'"]
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.*'"]