IOS中文排序
来源:互联网 发布:网络上的灰色产业链 编辑:程序博客网 时间:2024/05/04 17:37
1 原因
Ios默认使用utf-8格式编码,所以中文在IOS中默认排序是不可以用的,但IOS也支持使用笔画排序的(采用NSString的localizedCompare,可按笔划排序),但我们希望根据拼音排序,并且如果相同可以往后继续比较。详见:
http://space.itpub.net/29867/viewspace-688829
http://www.cnblogs.com/kuku/archive/2012/08/19/2646063.html
2 使用拼音对数组中的中文字符排序
参考:http://www.cocoachina.com/bbs/read.php?tid-111709.html
使用效果:
使用代码:
1 #import <Foundation/Foundation.h> 2 #import "ChineseString.h" 3 #import "pinyin.h" 4 5 int main(int argc, const char * argv[]) 6 { 7 @autoreleasepool{ 8 9 //结果请看输出10 11 //Step1:初始化12 NSMutableArray *stringsToSort=[NSArray arrayWithObjects:13 @"电脑",14 @"显示器",15 @"你好",16 @"推特",17 @"乔布斯",18 @"再见",19 @"暑假作业",20 @"键盘",21 @"鼠标",22 @"谷歌",23 @"苹果",24 nil];25 26 //Step1输出27 NSLog(@"尚未排序的NSString数组:");28 for(int i=0;i<[stringsToSort count];i++){29 NSLog(@"%@",[stringsToSort objectAtIndex:i]);30 }31 32 33 34 //Step2:获取字符串中文字的拼音首字母并与字符串共同存放35 NSMutableArray *chineseStringsArray=[NSMutableArray array];36 for(int i=0;i<[stringsToSort count];i++){37 ChineseString *chineseString=[[ChineseString alloc]init];38 39 chineseString.string=[NSString stringWithString:[stringsToSort objectAtIndex:i]];40 41 if(chineseString.string==nil){42 chineseString.string=@"";43 }44 45 if(![chineseString.string isEqualToString:@""]){46 NSString *pinYinResult=[NSString string];47 for(int j=0;j<chineseString.string.length;j++){48 NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];49 50 pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];51 }52 chineseString.pinYin=pinYinResult;53 }else{54 chineseString.pinYin=@"";55 }56 [chineseStringsArray addObject:chineseString];57 }58 59 //Step2输出60 NSLog(@"\n\n\n转换为拼音首字母后的NSString数组");61 for(int i=0;i<[chineseStringsArray count];i++){62 ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];63 NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);64 }65 66 67 68 //Step3:按照拼音首字母对这些Strings进行排序69 NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];70 [chineseStringsArray sortUsingDescriptors:sortDescriptors];71 72 //Step3输出73 NSLog(@"\n\n\n按照拼音首字母后的NSString数组");74 for(int i=0;i<[chineseStringsArray count];i++){75 ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];76 NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);77 }78 79 // Step4:如果有需要,再把排序好的内容从ChineseString类中提取出来80 NSMutableArray *result=[NSMutableArray array];81 for(int i=0;i<[chineseStringsArray count];i++){82 [result addObject:((ChineseString*)[chineseStringsArray objectAtIndex:i]).string];83 }84 85 //Step4输出86 NSLog(@"\n\n\n最终结果:");87 for(int i=0;i<[result count];i++){88 NSLog(@"%@",[result objectAtIndex:i]);89 }90 91 //程序结束92 93 NSLog(@"\n\n\nDemo By Hxy060799");94 }95 return 0;96 }
3 需要引入项目中文件
Pinyin.h Pinyin.c
ChineseString.h ChineseString.m
ChineseString.h
ChineseString.m
main.m
pinyin.h
pinyin.c
作者:syxChina
出处:http://syxchina.cnblogs.com、 http://hi.baidu.com/syxcs123
本文版权归作者、博客园和百度空间共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则作者会诅咒你的。
如果您阅读了我的文章并觉得有价值请点击此处,谢谢您的肯定1。
- IOS中文排序
- iOS 中文排序
- IOS中文排序
- IOS中文排序
- IOS中文排序
- IOS中文排序
- ios中文数组排序
- iOS 中文排序
- IOS中文排序学习
- IOS中文排序
- iOS 中文首字母排序,通讯录排序,好友分组排序
- iOS 中文首字母排序,通讯录排序,好友分组排序
- iOS学习 -- 中文按首字母拼音排序
- iOS--中文排序、全拼音排序
- IOS数组按中文关键字以字母序排序
- IOS数组按中文关键字以字母序排序
- IOS数组按中文关键字以字母序排序
- IOS数组按中文关键字以字母序排序
- IOS之云端应用
- UVA673- Parentheses Balance
- hotal
- hdu3347(模拟+STL)
- UVa409 Excuses, Excuses!
- IOS中文排序
- CentOS 命令行下网络配置
- poj1811(Miller-Rabin(素数测试)与Pollard rho(整数的因子分解))
- Hibernate中持久化对象的状态图解析
- hdu 1728 逃离迷宫(dFS+优先队列)
- IOS之数据持久化
- C/C++学习笔记(四)自定义数据类型:枚举类、结构体、链表
- IOS之应用程序设置
- problem