NSPredicate on array of arrays

后端 未结 2 486
温柔的废话
温柔的废话 2020-12-18 08:37

I have an array, that when printed out looks like this:

(
        (
        databaseVersion,
        13
    ),
        (
        lockedSetId,
        100
    )
)
         


        
相关标签:
2条回答
  • 2020-12-18 08:45

    Simply you can use ANY in NSPredicate:

    it's works fine

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", @"value"];
    

    or

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF contains[cd] %@", @"value"];
    
    0 讨论(0)
  • 2020-12-18 09:03

    This can be done using "SELF[index]" in the predicate:

    NSArray *array = @[
        @[@"databaseVersion", @13],
        @[@"lockedSetId", @100],
        @[@"databaseVersion", @55],
        @[@"foo", @"bar"]
    ];
    
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF[0] == %@", @"databaseVersion"];
    NSArray *filtered = [array filteredArrayUsingPredicate:pred];
    NSLog(@"%@", filtered);
    

    Output:

    (
            (
            databaseVersion,
            13
        ),
            (
            databaseVersion,
            55
        )
    )
    

    Or you can use a block-based predicate:

    NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(NSArray *elem, NSDictionary *bindings) {
        return [elem[0] isEqualTo:@"databaseVersion"];
    }];
    
    0 讨论(0)
提交回复
热议问题