[filteredArray filterUsingPredicate:
[NSPredicate predicateWithFormat:@"self BEGINSWITH[cd] %@", searchText]];
filteredArray
包含简单的NSStrings。 [你好,我的,上,下,等等......];
它将提供以searchText
开头的所有字符串。
但是如果字符串是“我的名字是”和searchText = name
之类的单词的组合。 NSPredicate
看起来会是什么样的?
更新:
如果我想要searchText = name
的结果,而不是searchText = ame
的结果,那该怎么办呢?也许是这样的:
[filteredArray filterUsingPredicate:
[NSPredicate predicateWithFormat:
@"self BEGINSWITH[cd] %@ or self CONTENTS[cd] %@",
searchText, searchText]];
但它应首先显示以searchText
开头的字符串,并且仅显示包含searchText
的字符串。
答案 0 :(得分:5)
[NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", searchText];
扩展问题后编辑
NSArray *beginMatch = [filteredArray filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:
@"self BEGINSWITH[cd] %@", searchText]];
NSArray *anyMatch = [filteredArray filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:
@"self CONTAINS[cd] %@", searchText]];
NSMutableArray *allResults = [NSMutableArray arrayWithArray:beginMatch];
for (id obj in anyMatch) {
if (![allResults containsObject:obj]) {
[allResults addObject:obj];
}
}
filteredArray = allResults;
这将得到所需顺序的结果,没有重复的条目。
答案 1 :(得分:2)
编辑实际上是从字符串的开头到搜索字符串长度的检查。如果发现完全匹配,则过滤
if u have name game tame lame
search Text : ame
filtered text would be: none
还包含从字符串开头到搜索字符串长度的检查,但是如果找到了开头,中间或结尾的精确搜索字符串,那么它就会被过滤。
if u have name game tame lame
search Text : ame
filtered text would be: name game tame lame because all has ame
[NSPredicate predicateWithFormat:@"self CONTAINS '%@'", searchText];