iOS_词典阵列 按key分组和排序

时间:2023-03-08 16:07:24
//
// 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;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。