汉字字符串排序,如人名排序
来源:互联网 发布:淘宝退换货流程图 编辑:程序博客网 时间:2024/06/04 18:36
在写通讯录时经常需要对人名进行 A->Z的排序,在网上已有好多demo,有朋友说使用 NSString的 localizedCompare 方法可以实现字符串比较,在通过数组的sortedArrayUsingComparator方法排序即可,小菜也做了尝试,结果未能如预期所想。
下面来讲讲小菜的做法吧:
1.准备获取汉字首字母的开源库,NSString + pinyin ,在 github 上有大把,需要请自行下载
2.使用递归对汉字字符串排序……开始吧,请看代码
//递归方法, 逐字取首字母排序
-(NSComparisonResult)compare:(NSString *)str1 string:(NSString *)str2{ NSString *ch1 = [str1 getFirstLetter]; //调用开源库获取首字母 NSString *ch2 = [str2 getFirstLetter]; //调用开源库获取首字母 NSComparisonResult result = [ch1 localizedCompare:ch2]; if (result == NSOrderedSame) //如果第一个字母是一样的,则进入递归 { if (str1.length == 1) { return NSOrderedAscending; } else if (str2.length == 1) { return NSOrderedDescending; } else { NSString *str3 = [str1 substringFromIndex:1]; NSString *str4 = [str2 substringFromIndex:1]; return [self compare:str3 string:str4]; } } else { return result; }}
//测试代码如下
```NSArray *array = [NSArray arrayWithObjects:@"&张三",@"&李四",@"圣诞节",@"圣诞没",@"圣诞啊",@"abc",@"acb",@"abad",@"abccdf",@"测试1",@"测试11",@"测2",@"测试33", nil]; __weak typeof(self) weakSelf = self; for(NSString *string in array) { NSLog(@"before :%@",string); } NSLog(@"-------------"); NSArray *newArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [weakSelf compare:obj1 string:obj2]; }]; for (NSString *string in newArray) { NSLog(@"after :%@",string); } NSLog(@"-------------"); //测试 localizedCompare 方法是否管用 NSArray *array1 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSString *str1 = obj1; NSString *str2 = obj2; return [str1 localizedCompare:str2]; }]; for (NSString *string in array1) { NSLog(@" new ---- %@",string); }
结果如下:
test[2404:103272] before :&张三
test[2404:103272] before :&李四
test[2404:103272] before :圣诞节
test[2404:103272] before :圣诞没
test[2404:103272] before :圣诞啊
test[2404:103272] before :abc
test[2404:103272] before :acb
test[2404:103272] before :abad
test[2404:103272] before :abccdf
test[2404:103272] before :测试1
test[2404:103272] before :测试11
test[2404:103272] before :测2
test[2404:103272] before :测试33
test[2404:103272] ————-
test[2404:103272] after :&李四
test[2404:103272] after :&张三
test[2404:103272] after :abad
test[2404:103272] after :abc
test[2404:103272] after :abccdf
test[2404:103272] after :acb
test[2404:103272] after :测2
test[2404:103272] after :测试1
test[2404:103272] after :测试11
test[2404:103272] after :测试33
test[2404:103272] after :圣诞啊
test[2404:103272] after :圣诞节
test[2404:103272] after :圣诞没
test[2404:103272] ————-
test[2404:103272] new —- &张三
test[2404:103272] new —- &李四
test[2404:103272] new —- abad
test[2404:103272] new —- abc
test[2404:103272] new —- abccdf
test[2404:103272] new —- acb
test[2404:103272] new —- 圣诞啊
test[2404:103272] new —- 圣诞没
test[2404:103272] new —- 圣诞节
test[2404:103272] new —- 测2
test[2404:103272] new —- 测试1
test[2404:103272] new —- 测试11
test[2404:103272] new —- 测试33
- 汉字字符串排序,如人名排序
- 人名排序程序实现
- 人名排序实现
- ios 人名首字母排序
- 汉字字符串按照拼音排序
- 如何用汉字的拼音对汉字排序
- Java比较汉字字符串排序与C++比较汉字排序
- 汉字排序
- 汉字排序
- 对汉字字符串按照拼音排序
- java汉字字符串按拼音排序
- JAVA汉字字符串按拼音排序
- JAVA汉字字符串按拼音排序
- JAVA汉字字符串按拼音排序
- 三行代码实现对中文人名排序
- 聊天记录按时间排序,时间相同时按人名排序
- SQL 字符串排序 (字符串为数字、字母、汉字)
- oc 之中的 汉字字符串转化成为拼音 汉字字符串的排序
- 静态类
- RecyclerView详解
- XIB技巧
- 打印2的n次方数字三角形
- [LeetCode] Insert Interval
- 汉字字符串排序,如人名排序
- java对象内存结构
- 求半平面交的点集
- Python递归查找目录
- Python中的tuple
- sql 语句查询今天、昨天、近7天、近30天、一个月内、上一月 数据
- R语言之逐步回归
- 内存,cache,buffer
- jstl 标签 循环 序号