技术的乐趣在于分享,欢迎多多交流,多多沟通。
全部博文(877)
分类: iOS平台
2015-10-19 23:57:05
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 使用拼音对数组中的中文字符排序
使用效果:
使用代码:
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