I have an array, that when printed out looks like this:
( ( databaseVersion, 13 ), ( lockedSetId, 100 ) )
Would it be possible to filter this using an NSPredicate
(potentially by the index in the array). So something like: give me all rows where element 0 is 'databaseVersion'? I know that if I had an array of dictionaries I could do this with a predicate similar the one found here, but I found that when using dictionaries and storing a large amount of data, my memory consumption went up (from ~80mb to ~120mb), so if possible I would to keep the array. Any suggestions on how this might be done?
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"]; }];
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"];