//
// 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;
}

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

iOS_词典阵列 按key分组和排序的更多相关文章

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

    int main(int argc, const charchar * argv[]) { @autoreleasepool { // 1.定义一个测试的字典数组 NSMutableArray *di ...

  2. Linq入门演练---(1)基本用法-分组,排序,内连接

    这一节大家共同学习下LINQ的基本用法,主要包括LINQ的分组,排序,和内外连接. 1.分组 基本语法:  group element by key element 表示查询结果返回的元素,key表示 ...

  3. WPF DataGrid分组和排序

    之前一直用的Dev的GridControl,控件自带分组排序啥的.今天试了下在wpf自带的Datagrid控件上实现分组和排序. Datagrid上实现这些功能主要用到CollectionViewSo ...

  4. java List分组和排序处理

    在一些应用中,需要将List中的对象按某种情况分组或者排序处理.做个小结如下: 1. 如一个List中存放了ProductDoing对象,productDoing对象有rawTypeId 现在要求将r ...

  5. MySQL在按照某个字段分组、排序加序号

    事情是这样的,最近领导给了一个新的需求,要求在一张订单表中统计每个人第一次和第二次购买的时间间隔,最后还需要按照间隔统计计数,求出中位数等数据. 由于MySQL不想Oracle那般支持行号.中位数等, ...

  6. mysql 分组内 排序

    mysql 分组内 排序 类似于 sqlserver over partition by   因为mysql中木有sqlserver over partition by这个函数,要从sqlserver ...

  7. ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

    转载:https://www.cnblogs.com/alsf/p/6344197.html 1.row_number() over()排序功能: (1) row_number() over()分组排 ...

  8. SAS 分组与排序

    SAS 分组与排序 SAS对数据集进行操作时,经常需要在SET.MERGE.MODIFY或 UPDATE语句中使用分组数据.使用分组数据最基本的方法是使用BY 语句,其基本形式如下: BY 变量列表; ...

  9. NodeJS对象数组Array 根据对象object key的值排序sort

    有个js对象数组 var ary=[{id:1,name:”b”},{id:2,name:”b”}] 需求是根据name 或者 id的值来排序,这里有个风骚的函数. /** * 对数组中的对象,按对象 ...

随机推荐

  1. J2SE知识点摘记(三)

    1.         在java只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类.但在java中却允许多层继承. 2.         非内部Class只能被public或者defaul ...

  2. 用 Python脚本生成 Android SALT 扰码

    发布Android 有偿应用时需要随机生成 SALT 扰码夹在文件中,以下是 Python脚本(当然你选择 C/Java/SHELL/Perl 或别的都行) #!/usr/bin/python # F ...

  3. H面试程序(29):求最大递增数

    要求:求最大递增数 如:1231123451 输出12345 #include<stdio.h> #include<assert.h> void find(char *s) { ...

  4. 在一个frame设置四个组件

    import javax.swing.*; import java.awt.event.*; import java.awt.*; class TouChaCol{ JFrame frame; JLa ...

  5. Android中Gallery显示手机中的图片

    在网上找了好久似乎都没有关于这方面的(可能是自己的信息量太小吧),于是自己来填补这个漏洞吧. 常见的方法莫过于自己定义一个数组,用以存储图片的引用,如: 1 private Integer[] pic ...

  6. JScript中的prototype(原型)属性研究

    今天看到同事使用js中的Prototype,感觉很是新鲜.由此想深入学习一下prototype(英['prəʊtətaɪp] 美['protə'taɪp]n. 原型:标准,模范),在学习prototy ...

  7. Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)

    我们依据上一次介绍的触屏事件和事件队列等知识来实现触屏的单击,双击,三连击事件. 下图为我们实现的效果图: 单击精灵跳跃一个高度, 双击精灵跳跃的高度比单击的高 三连击精灵跳跃的跟高 好了,開始动手吧 ...

  8. Java基础学习笔记2

    运算符: 重点:++和--运算符; a++ (a--):表示先将a的原值带入计算,计算完毕后,再将a的值进行+1(-1); ++a (--a):先将a的值进行+1(-1)运算,然后将+1(-1)以后的 ...

  9. Lua与C++的交互

    这篇文章说的挺详细的:Lua与C++的交互

  10. Linux学习之系统时间同步

    一.系统时间的设置 在Linux中设置系统时间,可以用date命令: //查看时间 [root@localhost ~]# date 2008年 12月 12日 星期五 :: CST //修改时间 [ ...