Using NSPredicate to filter array of arrays

我的未来我决定 提交于 2019-12-02 21:07:50

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
    )
)

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 :)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!