iOS_辞書配列はkeyでグループ化され、ソートされます.


//
//  main.m
//  SortGroup
//
//  Created by beyond on 14-10-26.
//  Copyright (c) 2014  beyond.com All rights reserved.
//   GroupTag     Order     enabled     

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 1.           
        NSMutableArray *dictArray = @[
                                      @{
                                          @"FEnabled" : [NSNumber numberWithInt:1],
                                          @"FGroupTag" : [NSNumber numberWithInt:0],
                                          @"FOrder" : [NSNumber numberWithInt:0],
                                          @"FName" : @"  "
                                          },
                                      @{
                                          @"FEnabled" : [NSNumber numberWithInt:1],
                                          @"FGroupTag" : [NSNumber numberWithInt:1],
                                          @"FOrder" : [NSNumber numberWithInt:0],
                                          @"FName" : @"  "
                                          },
                                      @{
                                          @"FEnabled" : [NSNumber numberWithInt:0],
                                          @"FGroupTag" : [NSNumber numberWithInt:1],
                                          @"FOrder" : [NSNumber numberWithInt:1],
                                          @"FName" : @"  "
                                          },
                                      @{
                                          @"FEnabled" : [NSNumber numberWithInt:1],
                                          @"FGroupTag" : [NSNumber numberWithInt:1],
                                          @"FOrder" : [NSNumber numberWithInt:2],
                                          @"FName" : @"  "
                                          },
                                      @{
                                          @"FEnabled" : [NSNumber numberWithInt:1],
                                          @"FGroupTag" : [NSNumber numberWithInt:2],
                                          @"FOrder" : [NSNumber numberWithInt:0],
                                          @"FName" : @"  "
                                          },
                                      @{
                                          @"FEnabled" : [NSNumber numberWithInt:1],
                                          @"FGroupTag" : [NSNumber numberWithInt:3],
                                          @"FOrder" : [NSNumber numberWithInt:0],
                                          @"FName" : @"  "
                                          },
                                      @{
                                          @"FEnabled" : [NSNumber numberWithInt:1],
                                          @"FGroupTag" : [NSNumber numberWithInt:3],
                                          @"FOrder" : [NSNumber numberWithInt:1],
                                          @"FName" : @"  "
                                          }
                                      
                                      ];
        // NSArray    NSMutableArray
        // 0、      , enabled 0     ,   
        NSMutableArray *dictArr = [NSMutableArray array];
        for (int i = 0; i < dictArray.count; i++) {
            NSDictionary *dict = dictArray[i];
            if ([[dict objectForKey:@"FEnabled"]intValue] == 1) {
                [dictArr addObject:dict];
            }
        }
        // NSLog(@"            :%@",dictArr);
        
        // 1、    GroupTag  
        NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FGroupTag" ascending:YES]];
        NSArray *sortedArr = [dictArr sortedArrayUsingDescriptors:sortDesc];
        // NSLog(@"      :%@",sortedArr);
        
        
        // 2、       , GroupTag
        //   ,     ,                 
        NSMutableArray *_groupArr = [NSMutableArray array];
        NSMutableArray *currentArr = [NSMutableArray array];
        NSLog(@"class--%@",[currentArr class]);
        //            ,     
        [currentArr addObject:sortedArr[0]];
        [_groupArr addObject:currentArr];
        //       ,      
        if(sortedArr.count > 1){
            for (int i = 1; i < sortedArr.count; i++) {
                //                          groupID
                NSMutableArray *preModelArr = [_groupArr objectAtIndex:_groupArr.count-1];
                int preGroupID = [[[preModelArr objectAtIndex:0] objectForKey:@"FGroupTag"] intValue];
                //       ,  groupID  ,               ;     ,         
                NSDictionary *currentDict = sortedArr[i];
                int groupID = [[currentDict objectForKey:@"FGroupTag"] intValue];
                if (groupID == preGroupID) {
                    [currentArr addObject:currentDict];
                }else{
                    //      ,        ,          ,       _groupArr
                    currentArr = [NSMutableArray array];
                    [currentArr addObject:currentDict];
                    [_groupArr addObject:currentArr];
                }
            }
        }
        // 3、            
        NSMutableArray *tempGroupArr = [NSMutableArray array];
        for (NSMutableArray *arr in _groupArr) {
            NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FOrder" ascending:YES]];
            NSMutableArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
                if([[obj1 objectForKey:@"FOrder"]intValue] < [[obj2 objectForKey:@"FOrder"]intValue]){
                    return NSOrderedAscending;
                }
                if([[obj1 objectForKey:@"FOrder"]intValue] > [[obj2 objectForKey:@"FOrder"]intValue]){
                    return NSOrderedDescending;
                }
                return NSOrderedSame;
            }];
            [tempGroupArr addObject:tempArr];
        }
        _groupArr = tempGroupArr;
        
        NSLog(@"    group  :%@",_groupArr);
    }
    return 0;
}