NSArray of NSDictionaries – merge des dictionarys avec la même paire de valeurs keys

J'ai un object NSArray d'objects NSDictionary :

 [ { id = 1; fromDate = 2014-04-03; toDate = 2014-04-05; date = 0000-00-00; title = title 1 }, { id = 1; fromDate = 0000-00-00; toDate = 0000-00-00; date = 2014-04-03 title = title 1 }, { id = 1; fromDate = 0000-00-00; toDate = 0000-00-00; date = 2014-04-04; title = title 1 }, { id = 2; fromDate = 0000-00-00; toDate = 0000-00-00; date = 2014-05-10; title = title 2 }, { id = 2; fromDate = 0000-00-00; toDate = 0000-00-00; date = 2014-05-11; title = title 2 } ] 

Je voudrais merge les dictionarys ayant la même valeur d'id dans un dictionary combinant toutes les keys date, fromDate et toDate, obtenant un tableau comme celui-ci, qui ignore les valeurs nulles:

 [ { id = 1, combinedDates = 2014-04-03, 2014-04-05, 2014-04-03, 2014-04-04; title = title 1 }, { id = 2, combinedDates = 2014-05-10, 2014-05-11; title = title 2 } ] 

Quelqu'un peut-il me diriger dans la bonne direction?

Je ne connais aucun moyen de le faire autre que la force brute de base:

 -(NSArray*)combinedArray:(NSArray*)array { NSMutableArray* combined = [NSMutableArray new]; // Iterate over each unique id value for(id key in [NSSet setWithArray:[array valueForKeyPath:@"id"]]) { // skip missing keys if([key isKindOfClass:[NSNull class]]) continue; // Sub array with only id = key NSArray* filtered = [array filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSDictionary* evaluatedObject, NSDictionary *bindings) { return [evaluatedObject valueForKey:@"date"] && [[evaluatedObject valueForKey:@"id"] isEqual:key]; }]]; // Grab the dates NSArray* dates = [filtered valueForKeyPath:@"date"]; // add the new dictionary [combined addObject:@{ @"id":key, @"combinedDates":dates }]; } return array; } 
 // Group By id -(NSMutableDictionary*)combinedArray:(NSArray*)array { NSMutableArray *categories = [[NSMutableArray alloc] init]; for (NSDictionary *data in array) { NSSsortingng *category = [data valueForKey:@"id"]; if (![categories containsObject:category]) { [categories addObject:category]; } } NSMutableDictionary *categoryData = [[NSMutableDictionary alloc]init]; for (NSSsortingng *strCat in categories) { NSMutableArray *catArray = [[NSMutableArray alloc]init]; for (NSDictionary *data in array) { NSSsortingng *category = [data valueForKey:@"id"]; if ([category isEqualToSsortingng:strCat]) { [catArray addObject:data]; } } [categoryData setObject:catArray forKey:strCat]; } return categoryData; }