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。
原创粉丝点击