Using NSPredicate to filter array of arrays
16,185
Solution 1
Just for completeness: It can be done using predicateWithFormat:
:
NSArray *array = @[
@[@"A", @"B", @"C"],
@[@"D", @"E", @"F"],
];
NSString *searchTerm = @"E";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", searchTerm];
NSArray *filtered = [array filteredArrayUsingPredicate:predicate];
NSLog(@"%@", filtered);
Output:
( ( D, E, F ) )
Solution 2
From what I know you can't do it as a one-liner so instead of using predicateWithFormat:
you should use predicateWithBlock:
Something like this should do what you want
NSString *someString = @"Find me"; // The string you need to find.
NSArray *arrayWithArrayOfStrings = @[]; // Your array
[arrayWithArrayOfStrings filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSArray *evaluatedArray, NSDictionary *bindings) {
return [evaluatedArray indexOfObject:someString] != NSNotFound;
}]];
Update: Martin R proved me wrong :)
Author by
DanielR
Updated on June 04, 2022Comments
-
DanielR almost 2 years
I have the following situation:
NSArray( NSArray( string1, string2, string3, string4, string5, ) , NSArray( string6, string7, string8, string9, string10, ) )
Now I need a predicate that returns the array that contains a specific string. e.g. Filter Array that contains string9 -> I should get back the entire second array because I need to process the other strings inside that array. Any ideas?
-
Anupdas almost 11 years+1, I was working on this with SUBQUERY,
[NSPredicate predicateWithFormat:@"SUBQUERY(SELF, $content, $content == [c] %@)",string]
but this didn't work. Any pointers? -
Martin R almost 11 years@Anupdas: You were almost there,
@"SUBQUERY(SELF, $content, $content == [c] %@).@count > 0"
works. -
Anupdas almost 11 years@MartinR Awesome, it works. So the result of the subquery should be equated to some for even forming the predicate. Thanks :)
-
Martin R almost 11 years@Anupdas: Exactly, the SUBQUERY returns a set, but the predicate must evaluate to true or false.
-
Meghs Dhameliya about 9 yearsis it possible to get only E as element of nested array