Reputation: 726
I have an array(NSArray
) let's say
NSArray *cityArry = @[@"Chennai", @"Mumbai", @"Kolkata"];
For example I have mentioned the NSArray
with 3 objects, but actually in runtime I have an array which contain more than 1000 objects.
Now I have the string(NSString
) "chennai Tnagar"
NSString *scanedStr = @"Chennai Tnagar";
So, now I want to find out that the whether range of scanedStr
contain in cityArry
. For example I should get output as @"Chennai"
from the cityArry
.
I know we can do this by looping the NSArray
and by using rangeofstring
we can get the output. Since I have more than 1000 objects I don't want to do the looping. Please guide me and help me out how to solve this.
Thanks in advance
Upvotes: 0
Views: 349
Reputation: 18253
I am certain that this is a duplicate of another answer, but I can't find it. If anybody can, please close this as a dupe.
Anyway, the IN
operator works nicely on strings. Apparently it is undocumented, so you will have to decide if you want to rely on it:
NSArray *cityArray = @[@"Chennai",@"Mumbai",@"Kolkata"];
NSString *scannedStr = @"Chennai Tnagar";
NSPredicate *pred = [NSPredicate predicateWithFormat: @"SELF IN[cd] %@", scannedStr];
NSArray *result = [cityArray filteredArrayUsingPredicate: pred];
This solution has the advantage of keeping the object of the predicate on the left, which I happen to find easier to read - but as mentioned, it is not documented.
In case you wish to use a documented construct, you can swap the order of the predicate and use a normal CONTAINS
:
pred = [NSPredicate predicateWithFormat: @"%@ CONTAINS[cd] SELF", scannedStr];
Upvotes: 1
Reputation: 21144
You could basically split the string and search for the array on the cityArry.
NSString *scannedStr = @"Chennai Tnager";
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF in[cd] %@", [scannedStr componentsSeparatedByString:@" "]];
[cityArray filteredArrayUsingPredicate: predicate];
Upvotes: 3
Reputation: 3428
I propose that you make use of SQL query like
by using sqlite3 as a database of the list of all cities you have. Its a bit painful implementing a database but it solves the problem I think.
Upvotes: 0