iOS_字典数组 按key分组和排序

  1. int main(int argc, const charchar * argv[]) {  
  2.     @autoreleasepool {  
  3.         // 1.定义一个测试的字典数组  
  4.         NSMutableArray *dictArray = @[  
  5.                                       @{  
  6.                                           @"FEnabled" : [NSNumber numberWithInt:1],  
  7.                                           @"FGroupTag" : [NSNumber numberWithInt:0],  
  8.                                           @"FOrder" : [NSNumber numberWithInt:0],  
  9.                                           @"FName" : @"宝玉"  
  10.                                           },  
  11.                                       @{  
  12.                                           @"FEnabled" : [NSNumber numberWithInt:1],  
  13.                                           @"FGroupTag" : [NSNumber numberWithInt:1],  
  14.                                           @"FOrder" : [NSNumber numberWithInt:0],  
  15.                                           @"FName" : @"黛玉"  
  16.                                           },  
  17.                                       @{  
  18.                                           @"FEnabled" : [NSNumber numberWithInt:0],  
  19.                                           @"FGroupTag" : [NSNumber numberWithInt:1],  
  20.                                           @"FOrder" : [NSNumber numberWithInt:1],  
  21.                                           @"FName" : @"宝钗"  
  22.                                           },  
  23.                                       @{  
  24.                                           @"FEnabled" : [NSNumber numberWithInt:1],  
  25.                                           @"FGroupTag" : [NSNumber numberWithInt:1],  
  26.                                           @"FOrder" : [NSNumber numberWithInt:2],  
  27.                                           @"FName" : @"湘云"  
  28.                                           },  
  29.                                       @{  
  30.                                           @"FEnabled" : [NSNumber numberWithInt:1],  
  31.                                           @"FGroupTag" : [NSNumber numberWithInt:2],  
  32.                                           @"FOrder" : [NSNumber numberWithInt:0],  
  33.                                           @"FName" : @"妙玉"  
  34.                                           },  
  35.                                       @{  
  36.                                           @"FEnabled" : [NSNumber numberWithInt:1],  
  37.                                           @"FGroupTag" : [NSNumber numberWithInt:3],  
  38.                                           @"FOrder" : [NSNumber numberWithInt:0],  
  39.                                           @"FName" : @"晴雯"  
  40.                                           },  
  41.                                       @{  
  42.                                           @"FEnabled" : [NSNumber numberWithInt:1],  
  43.                                           @"FGroupTag" : [NSNumber numberWithInt:3],  
  44.                                           @"FOrder" : [NSNumber numberWithInt:1],  
  45.                                           @"FName" : @"袭人"  
  46.                                           }  
  47.                                         
  48.                                       ];  
  49.         // NSArray 转成 NSMutableArray  
  50.         // 0、对于不启用的,即enabled为0的字典模型,删除掉  
  51.         NSMutableArray *dictArr = [NSMutableArray array];  
  52.         for (int i = 0; i < dictArray.count; i++) {  
  53.             NSDictionary *dict = dictArray[i];  
  54.             if ([[dict objectForKey:@"FEnabled"]intValue] == 1) {  
  55.                 [dictArr addObject:dict];  
  56.             }  
  57.         }  
  58.         // NSLog(@"清除未启用的字典后的数组:%@",dictArr);  
  59.           
  60.         // 1、对数组按GroupTag排序  
  61.         NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FGroupTag" ascending:YES]];  
  62.         NSArray *sortedArr = [dictArr sortedArrayUsingDescriptors:sortDesc];  
  63.         // NSLog(@"排序后的数组:%@",sortedArr);  
  64.           
  65.           
  66.         // 2、对数组进行分组,按GroupTag  
  67.         // 遍历,创建组数组,组数组中的每一个元素是一个模型数组  
  68.         NSMutableArray *_groupArr = [NSMutableArray array];  
  69.         NSMutableArray *currentArr = [NSMutableArray array];  
  70.         NSLog(@"class--%@",[currentArr class]);  
  71.         // 因为肯定有一个字典返回,先添加一个  
  72.         [currentArr addObject:sortedArr[0]];  
  73.         [_groupArr addObject:currentArr];  
  74.         // 如果不止一个,才要动画添加  
  75.         if(sortedArr.count > 1){  
  76.             for (int i = 1; i < sortedArr.count; i++) {  
  77.                 // 先取出组数组中  上一个模型数组的第一个字典模型的groupID  
  78.                 NSMutableArray *preModelArr = [_groupArr objectAtIndex:_groupArr.count-1];  
  79.                 int preGroupID = [[[preModelArr objectAtIndex:0] objectForKey:@"FGroupTag"] intValue];  
  80.                 // 取出当前字典,根据groupID比较,如果相同则添加到同一个模型数组;如果不相同,说明不是同一个组的  
  81.                 NSDictionary *currentDict = sortedArr[i];  
  82.                 int groupID = [[currentDict objectForKey:@"FGroupTag"] intValue];  
  83.                 if (groupID == preGroupID) {  
  84.                     [currentArr addObject:currentDict];  
  85.                 }else{  
  86.                     // 如果不相同,说明 有新的一组,那么创建一个模型数组,并添加到组数组_groupArr  
  87.                     currentArr = [NSMutableArray array];  
  88.                     [currentArr addObject:currentDict];  
  89.                     [_groupArr addObject:currentArr];  
  90.                 }  
  91.             }  
  92.         }  
  93.         // 3、遍历 对每一组 进行排序  
  94.         NSMutableArray *tempGroupArr = [NSMutableArray array];  
  95.         for (NSMutableArray *arr in _groupArr) {  
  96.             NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FOrder" ascending:YES]];  
  97.             NSMutableArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {  
  98.                 if([[obj1 objectForKey:@"FOrder"]intValue] < [[obj2 objectForKey:@"FOrder"]intValue]){  
  99.                     return NSOrderedAscending;  
  100.                 }  
  101.                 if([[obj1 objectForKey:@"FOrder"]intValue] > [[obj2 objectForKey:@"FOrder"]intValue]){  
  102.                     return NSOrderedDescending;  
  103.                 }  
  104.                 return NSOrderedSame;  
  105.             }];  
  106.             [tempGroupArr addObject:tempArr];  
  107.         }  
  108.         _groupArr = tempGroupArr;  
  109.           
  110.         NSLog(@"封装好的group数组:%@",_groupArr);  
  111.     }  
  112.     return 0;  
  113. }  
原文地址:https://www.cnblogs.com/Milo-CTO/p/4551874.html