NSPredicate on array of arrays

匿名 (未验证) 提交于 2019-12-03 01:05:01

问题:

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?

回答1:

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"]; }]; 


回答2:

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"]; 


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