[filteredArray filterUsingPredicate:
[NSPredicate predicateWithFormat:@"self BEGINSWITH[cd] %@", searchText]];
filteredArray
contains simple NSStrings. [hello, my, get, up, seven, etc...];
It will give all strings that begin with searchText
.
But if string will be a combination of words like "my name is", and searchText = name
. What would a NSPredicate
look like to achieve this?
UPDATE:
And how would it have to be if i want to a result with searchText = name
, but not with searchText = ame
? Maybe like this:
[filteredArray filterUsingPredicate:
[NSPredicate predicateWithFormat:
@"self BEGINSWITH[cd] %@ or self CONTENTS[cd] %@",
searchText, searchText]];
But it should first display the strings that begin with searchText
and only after those which contain searchText
.
[NSPredicate predicateWithFormat:@"self CONTAINS[cd] %@", searchText];
EDIT after expansion of question
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;
This will have the results in the desired order without duplicate entries.
EDIT Actually beginsWith check from start of string to search string length. if exact match found then its filtered
if u have name game tame lame
search Text : ame
filtered text would be: none
contains also check from start of string to search string length but if found start, middle or end exact search string then it is filtered.
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];
来源:https://stackoverflow.com/questions/12510419/how-to-filter-array-with-nspredicate-for-combination-of-words