Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2604621
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5920
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: iOS平台

2015-10-19 23:57:05

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 使用拼音对数组中的中文字符排序

参考:

使用效果:

使用代码:

 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
阅读(544) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~