zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    ql语句中left join和inner join中的on与where的区别分析
    C#如何通过属性名称反射出属性本身
    mvc中查询字符串请求过长
    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别
    后台二进制文件 在前台下载方法总结
    C#中try catch finally的执行顺序
    python生成随机密码
    Bridged(桥接模式)
    NAT(地址转换模式)
    TCP协议详解
  • 原文地址:https://www.cnblogs.com/Milo-CTO/p/4551874.html
Copyright © 2011-2022 走看看