按首字母分组排序数组

  1
  2
  3 // 按首字母分组排序数组
  4
  5 -(NSMutableArray *)sortObjectsAccordingToInitialWith:(NSArray *)arr {
  6
  7
  8
  9     // 初始化UILocalizedIndexedCollation
 10
 11     UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
 12
 13
 14
 15     //得出collation索引的数量,这里是27个(26个字母和1个#)
 16
 17     NSInteger sectionTitlesCount = [[collation sectionTitles] count];
 18
 19     //初始化一个数组newSectionsArray用来存放最终的数据,我们最终要得到的数据模型应该形如@[@[以A开头的数据数组], @[以B开头的数据数组], @[以C开头的数据数组], ... @[以#(其它)开头的数据数组]]
 20
 21     NSMutableArray *newSectionsArray = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount];
 22
 23
 24
 25     //初始化27个空数组加入newSectionsArray
 26
 27     for (NSInteger index = 0; index < sectionTitlesCount; index++) {
 28
 29         NSMutableArray *array = [[NSMutableArray alloc] init];
 30
 31     }
 32
 33
 34
 35     //将每个名字分到某个section下
 36
 37     for (ContactsUserModel *userModel in _aryUser ){
 38
 39         //获取name属性的值所在的位置,比如"林丹",首字母是L,在A~Z中排第11(第一位是0),sectionNumber就为11
 40
 41 //        trueName model 对应的属性名
 42
 43
 44
 45         NSInteger sectionNumber = [collation sectionForObject:userModel collationStringSelector:@selector(trueName)];
 46
 47         //把name为“林丹”的p加入newSectionsArray中的第11个数组中去
 48
 49         NSMutableArray *sectionNames = newSectionsArray[sectionNumber];
 50
 51         [sectionNames addObject:userModel];
 52
 53
 54
 55
 56
 57         NSLog(@"sectionNames===%@",sectionNames);
 58
 59
 60
 61     }
 62
 63
 64
 65     NSLog(@"newSectionsArray==%@",newSectionsArray);
 66
 67
 68
 69
 70
 71     //对每个section中的数组按照name属性排序
 72
 73     for (NSInteger index = 0; index < sectionTitlesCount; index++) {
 74
 75         NSMutableArray *personArrayForSection = newSectionsArray[index];
 76
 77         NSArray *sortedPersonArrayForSection = [collation sortedArrayFromArray:personArrayForSection collationStringSelector:@selector(name)];
 78
 79         newSectionsArray[index] = sortedPersonArrayForSection;
 80
 81     }
 82
 83     NSLog(@"newSectionsArray==%@",newSectionsArray);
 84
 85
 86
 87     //    //删除空的数组
 88
 89         NSMutableArray *finalArr = [NSMutableArray new];
 90
 91     _sectionTitles =[NSMutableArray array];
 92
 93     [_sectionTitles addObject:@"部门"];
 94
 95
 96
 97
 98
 99         for (NSInteger index = 0; index < sectionTitlesCount; index++) {
100
101
102
103             if (((NSMutableArray *)(newSectionsArray[index])).count != 0) {
104
105                 [finalArr addObject:newSectionsArray[index]];
106
107                 [self.sectionTitles addObject: [[collation sectionTitles] objectAtIndex:index]];
108
109
110
111
112
113             }
114
115         }
116
117
118
119     return finalArr;//删除没有值的数组
120
121
122
123
124
125 //    return newSectionsArray;
126
127
128
129 }
130
131
132
134
135 #pragma mark SectionTitles
136
137 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
138
139 {
140
141     return self.sectionTitles[section];
142
143 }
144
145
146
147 - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
148
149 {
150
151     return self.sectionTitles;
152
153 }

原文地址:https://www.cnblogs.com/yangqinoak/p/11493245.html

时间: 2024-10-27 08:41:33

按首字母分组排序数组的相关文章

本地化下按首字母分组排序的神器——UILocalizedIndexedCollation

最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引.因为按照我一贯的的做法,都是想要做成更通用的.支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多也就认识中文和英语,这就不能用以前的那些比如把汉字转成拼音再排序的方法了,效率不高不说,对其他国家的本地化更是行不通.一个偶然的机会,我才发现SDK里已经提供了一个实现此功能的神器——UILocalizedIndexedCollation. 首先提一下,UILocalizedIndexedColla

sql中如何按某字段值的首字母分组?

sql中如何按某字段值的首字母分组?如一字段有值: x001 x003 p005 y0093 分组结果应为.X=2,p=1,y=1 ------解决方案--------------------如一字段有值: x001 x003 p005 y0093 分组结果应为.X=2,p=1,y=1 select left(col,1) , count(*) from tb group by left(col,1)

字符串按首字母分组并ToDictionary的实现

这是携程(深圳).net开发笔试的一道题目,要求实现字符串按首字母分组并ToDictionary输出,当时没有做出来,后面研究了一下,现在将这道题的几种实现方式记录下来. 首先初始化数据源,是一个List<string>对象.如下代码. //数据源 List<string> list = new List<string> { "Beijing", "Shanghai", "Tianjin", "Cho

Java -------- 首字母相关排序总结

Java 字符串数组首字母排序 字符串数组按首字母排序:(区分大小写) String[] strings = new String[]{"ba","aa","CC","Ba","DD","ee","dd"}; Arrays.sort(strings); for (int i = 0; i < strings.length; i++) { System.out.p

关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案

首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值     SCHINESE_RADICAL_M   按照部首(第一顺序).笔划(第二顺序)排序     SCHINESE_STROKE_M   按照笔划(第一顺序).部首(第二顺序)排序     SCHINESE_PINYIN_M   按照拼音排序 oracle9i中新增了按照拼音.部首.笔画排序功能 用法示例: Java代码   拼音 SEL

js中文首字母排序(一)

sort()localeCompare() sort()使用,sort()函数会对使用的数组对象进行排序,排序规则安装字符编码顺序排序, 如:(无法直接比较中文) var arr = new Array(6); arr[0] = "23" arr[1] = "1" arr[2] = "8" arr[3] = "25" arr[4] = "1000" arr[5] = "1" arr.so

IOS数组按中文关键字以字母序排序

本文转载至 http://blog.csdn.net/xunyn/article/details/7882087 iosobjective cuser框架通讯 IOS项目中会用到对通讯录的联系人或是会员按姓名为关键字排序,因为NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完成按A~Z的排序,这看起来是个头疼的问题,因为牵扯到汉字转为拼音,kmyhy给出一个较易实现的方法,获取汉字的首字的首字母,如将“王”变成“W”,完整文章(传送门). 其中他通过pinyinFirstLet

mysql 中将汉字按照首字母排序

因为数据库中可以设定表的编码格式,不同编码格式下,中文的排序有区别,下面分别介绍常用编码下的排序方法. 1.如果数据表的某字段的字符编码是 utf8_general_ci,排序写法: ORDER BY CONVERT(表别名.字段名 USING gbk) COLLATE gbk_chinese_ci ASC; 例子 SELECT * FROM mg_clinic mc ORDER BY CONVERT(mc.`CLNAME` USING gbk) COLLATE gbk_chinese_ci A

简单实现UITableView索引功能(中英文首字母索引) ByH罗

UITableView索引功能是常见的,主要是获取中英文的首字母并排序,系统自带获取首字母 //系统获取首字母 - (NSString *) pinyinFirstLetter:(NSString*)sourceString { NSMutableString *source = [sourceString mutableCopy]; CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformMa