如何过滤数据这是一个字典数组每个字典包含NSSet对象



我有NSDictionariesNSMutableArray,每个字典包含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文档

最新更新