2012-11-13 149 views
2

即时通讯的问题是,我不能排序NSMutableDictionary对象的NSMutableArray,我想通过评级排序对象,评级是一个NSNumber,我失踪了什么?排序字典对象数组

我当前的代码,总结所有的评级从“arrayMealRating”和排序结果数组:

  [arrayMealRating addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys: 
             [eachObject objectForKey:@"Airline"], @"Airline" 
             ,[eachObject objectForKey:@"setMealRating"], @"setMealRating" 
             , nil]]; 

     } 
     NSArray *airlineNames = [arrayMealRating valueForKeyPath:@"@distinctUnionOfObjects.Airline"]; 

     // Loop through all the airlines 
     for (NSString *airline in airlineNames) { 

      // Get an array of all the dictionaries for the current airline 
      NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(Airline == %@)", airline]; 
      NSArray *airlineMealRating = [arrayMealRating filteredArrayUsingPredicate:predicate]; 

      // Get the sum of all the ratings using KVC @sum collection operator 
      NSNumber *rating = [airlineMealRating valueForKeyPath:@"@sum.setMealRating"]; 

      //NSLog(@"%@: %@", airline, rating); 
      [sortedMealArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys: 
             airline, @"Airline" 
             ,[rating stringValue], @"setMealRating" 
             , nil]]; 
     } 



     NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"setMealRating" ascending:YES]; 
     [sortedMealArray sortedArrayUsingDescriptors:[NSMutableArray arrayWithObjects:descriptor,nil]]; 
     auxMealRating = [sortedMealArray copy]; 

有任何疑问,请不要向下票,就问我,我会编辑的问题。

最好的问候和抱歉,我可怜的英语。

回答

4

这应该做你想要什么:

NSArray *sortedArray = [arrayMealRating sortedArrayUsingComparator:^(id obj1, id obj2) { 
    NSNumber *rating1 = [(NSDictionary *)obj1 objectForKey:@"setMealRating"]; 
    NSNumber *rating2 = [(NSDictionary *)obj2 objectForKey:@"setMealRating"]; 
    return [rating1 compare:rating2]; 
}]; 
+0

由于它的工作:)已经一个侧面说明可以在被NSOrderedAscending排序?是的,如何? –

+0

@BrunoVasconcelos是的,只是将“rating1 compare:rating2”与“rating2 compare:rating1”相反。 – trojanfoe

+0

天才:P谢谢! –