我有NSDictionaries
的NSMutableArray
,每个字典包含NSSet
对象,它基本上是核心数据中多对多关系的其他实体。我想要的是基于NSSet
的特定值,我想过滤我的NSMutableArray
。请建议,如何接近。
nspreate to rescue.
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
// I have NSMutableArray ...
NSMutableArray *array = [NSMutableArray new];
NSArray *result = nil;
// ... of NSDictionaries ...
// ... each dictionary contains NSSet object which is basically other entity ...
NSDictionary *dict1 = @{ @"name": @"Adam",
@"age": @(47),
@"children": [NSSet setWithArray:@[ @"Alan", @"Bobby", @"Chuckie" ]]};
NSDictionary *dict2 = @{ @"name": @"Bob",
@"age": @(37),
@"children": [NSSet setWithArray:@[ @"Brian", @"Chaz", @"Donald" ]]};
NSDictionary *dict3 = @{ @"name": @"Charlie",
@"age": @(27),
@"children": [NSSet setWithArray:@[ @"Caaaaaarl", @"Donnie", @"Eddy" ]]};
// ...
[array addObject:dict1];
[array addObject:dict2];
[array addObject:dict3];
// So, let's find children (stirngs) who contain 'd'
// This should be Bob and Charlie.
NSPredicate *predicate = nil;
predicate = [NSPredicate predicateWithFormat:@"ANY children CONTAINS[cd] %@", @"D"];
result = [array filteredArrayUsingPredicate:predicate];
NSLog(@"%@", result);
// {
// age = 37;
// children = "{(n Brian,n Chaz,n Donaldn)}";
// name = Bob;
// },
// {
// age = 27;
// children = "{(n Donnie,n Eddy,n Caaaaaarln)}";
// name = Charlie;
// }
}
}
正如你所看到的,你可以使用nsprecate来过滤深度集合。集合操作符各不相同,这取决于您要执行的操作。更多信息请参见Apple nsprecate文档