IOS 中文排序

转自:http://www.cnblogs.com/syxchina/archive/2012/10/11/2720257.html

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

使用效果:

IOS 中文排序

使用代码:

复制代码
 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 }

你可能感兴趣的:(ios)