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. // NSArray 转成 NSMutableArray
  49. // 0、对于不启用的,即enabled为0的字典模型,删除掉
  50. NSMutableArray *dictArr = [NSMutableArray array];
  51. for (int i = 0; i < dictArray.count; i++) {
  52. NSDictionary *dict = dictArray[i];
  53. if ([[dict objectForKey:@"FEnabled"]intValue] == 1) {
  54. [dictArr addObject:dict];
  55. }
  56. }
  57. // NSLog(@"清除未启用的字典后的数组:%@",dictArr);
  58. // 1、对数组按GroupTag排序
  59. NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FGroupTag" ascending:YES]];
  60. NSArray *sortedArr = [dictArr sortedArrayUsingDescriptors:sortDesc];
  61. // NSLog(@"排序后的数组:%@",sortedArr);
  62. // 2、对数组进行分组,按GroupTag
  63. // 遍历,创建组数组,组数组中的每一个元素是一个模型数组
  64. NSMutableArray *_groupArr = [NSMutableArray array];
  65. NSMutableArray *currentArr = [NSMutableArray array];
  66. NSLog(@"class--%@",[currentArr class]);
  67. // 因为肯定有一个字典返回,先添加一个
  68. [currentArr addObject:sortedArr[0]];
  69. [_groupArr addObject:currentArr];
  70. // 如果不止一个,才要动画添加
  71. if(sortedArr.count > 1){
  72. for (int i = 1; i < sortedArr.count; i++) {
  73. // 先取出组数组中  上一个模型数组的第一个字典模型的groupID
  74. NSMutableArray *preModelArr = [_groupArr objectAtIndex:_groupArr.count-1];
  75. int preGroupID = [[[preModelArr objectAtIndex:0] objectForKey:@"FGroupTag"] intValue];
  76. // 取出当前字典,根据groupID比较,如果相同则添加到同一个模型数组;如果不相同,说明不是同一个组的
  77. NSDictionary *currentDict = sortedArr[i];
  78. int groupID = [[currentDict objectForKey:@"FGroupTag"] intValue];
  79. if (groupID == preGroupID) {
  80. [currentArr addObject:currentDict];
  81. }else{
  82. // 如果不相同,说明 有新的一组,那么创建一个模型数组,并添加到组数组_groupArr
  83. currentArr = [NSMutableArray array];
  84. [currentArr addObject:currentDict];
  85. [_groupArr addObject:currentArr];
  86. }
  87. }
  88. }
  89. // 3、遍历 对每一组 进行排序
  90. NSMutableArray *tempGroupArr = [NSMutableArray array];
  91. for (NSMutableArray *arr in _groupArr) {
  92. NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FOrder" ascending:YES]];
  93. NSMutableArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  94. if([[obj1 objectForKey:@"FOrder"]intValue] < [[obj2 objectForKey:@"FOrder"]intValue]){
  95. return NSOrderedAscending;
  96. }
  97. if([[obj1 objectForKey:@"FOrder"]intValue] > [[obj2 objectForKey:@"FOrder"]intValue]){
  98. return NSOrderedDescending;
  99. }
  100. return NSOrderedSame;
  101. }];
  102. [tempGroupArr addObject:tempArr];
  103. }
  104. _groupArr = tempGroupArr;
  105. NSLog(@"封装好的group数组:%@",_groupArr);
  106. }
  107. return 0;
  108. }

iOS_字典数组 按key分组和排序的更多相关文章

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

    // // main.m // SortGroup // // Created by beyond on 14-10-26. // Copyright (c) 2014年 beyond.com All ...

  2. python 根据字典中的key,value进行排序

    #coding=utf-8 import requests,json,collections,base64,datetime def sort(datas): data=json.dumps(data ...

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

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

  4. PHP开发小技巧②—实现二维数组根据key进行排序

    在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...

  5. python 对字典分别按照key值、value值进行排序

    1.sorted函数首先介绍sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数. 其中iterable表示 ...

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

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

  7. php对二维数组进行相关操作(排序、转换、去空白等)

    php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04   这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...

  8. JS中遍历普通数组和字典数组的区别

    // 普通数组 var intArray = new Array(); intArray[0] = "第一个"; intArray[1] = "第二个"; fo ...

  9. PHP根据数组的值分组

    PHP根据数组的值分组,php array中没有自带这个函数但是很常用,今天写了出来记录一下. 代码: $_array = array(        array(1,11,'2016-05-18') ...

随机推荐

  1. realloc在aarch64_be-gcc的奇怪表现

    最近遇到一个使用aarch64_be-gcc编译的ssh服务器出现不能通过ssh1协议使用密钥+passphrase不能正常登陆的问题. (⊙o⊙)…不要奇怪为啥还在用SSH1,我也在奇怪.. 一顿捣 ...

  2. Comparable和Comparator的学习笔记

    目录 Comparable和Comparator的实现 Comparable接口 Comparator接口 总结 参考自 今天在项目开发中,遇到要对List中的对象按照对象某一属性进行排序的问题,我发 ...

  3. 后端model传入前端JSP页面中的值判断后再取值

    所遇到的问题后端model传入前端JSP页面中的值通过foreach循环内要满足条件才能取值给Div中,我们知道jsp页面中可以直接用EL表达式取值,格式就是${"model中传来的数据&q ...

  4. PHP生成随机数函数rand(min,max)

    rand(min,max):生成min到max 的随机数,注意:包括边界rand() 返回 0 到 RAND_MAX 之间的伪随机整数.例如,想要 5 到 15(包括 5 和 15)之间的随机数,用 ...

  5. BZOJ 1014 [JSOI2008]火星人prefix | Splay维护哈希值

    题目: 题解: #include<cstdio> #include<algorithm> #include<cstring> typedef long long l ...

  6. POJ3252 Round Numbers 【数位dp】

    题目链接 POJ3252 题解 为什么每次写出数位dp都如此兴奋? 因为数位dp太苟了 因为我太弱了 设\(f[i][0|1][cnt1][cnt0]\)表示到二进制第\(i\)位,之前是否达到上界, ...

  7. Hibernate中inverse="true"的理解

    Hibernate中inverse="true"的理解 举例如下 转自:http://lijiejava.iteye.com/blog/776587 Customer类: publ ...

  8. Gradle for Android(二)全局设置、自定义BuildConfig

    全局设置 如果有很多项目,可以设置全局来统一管理版本号或依赖库,根目录下build.gradle下: ext { compileSdkVersion = 23 buildToolsVersion = ...

  9. Oracle中DBMS_LOB包使用小结

    本文主要介绍oracle数据库中dbms_lob包的使用以及使用dbms_lob包来维护lob数据库类型的基本方法.随着社会的发展,在现代信息系统的开发中,需要存储的已不仅仅是简单的文字信息,同时还包 ...

  10. 培训补坑(day3:网络流&最小割)

    继续补坑.. 第三天主要是网络流 首先我们先了解一下网络流的最基本的算法:dinic 这个算法的主要做法就是这样的: 在建好的网络流的图上从源点开始向汇点跑一遍BFS,然后如果一条边的流量不为0,那么 ...