IOS中文排序

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

使用效果:

使用代码:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值