2015-05-20 3 views
0

У меня есть NSMutableArray из NSDictionaries, и каждый словарь содержит NSSet объект, который в основном является другим сущностью, как многие из многих, отношениями в основных данных. Что я хочу, зависит от определенного значения NSSet Я хочу отфильтровать мой NSMutableArray. Пожалуйста, предложите, как подойти.Как фильтровать данные, которые являются массивом словарей, и каждый словарь содержит объект NSSet

ответ

1

NSPredicate для спасения.

#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 Donald\n)}"; 
//    name = Bob; 
//   }, 
//    { 
//    age = 27; 
//    children = "{(\n Donnie,\n Eddy,\n Caaaaaarl\n)}"; 
//    name = Charlie; 
//   } 
    } 
} 

Как вы можете видеть, вы можете использовать NSPredicate для фильтрации глубоких коллекций. Операторы коллекции меняются в зависимости от того, что вы пытаетесь сделать. Более подробная информация доступна по адресу Apple NSPredicate docs.