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

来源:互联网 发布:iscroll.js中文官网 编辑:程序博客网 时间:2024/05/17 03:51
////  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;}

0 0
原创粉丝点击