中文首字母 排序
来源:互联网 发布:阿里云杭州和北京对比 编辑:程序博客网 时间:2024/06/06 05:14
因项目需要对通讯录中的联系人进行排序,需要对中文字符进行拼音转换。其实这个转换并没有想象中的那么难(因为我们只是把中文转为拼音首字母而已,比如“王”转换为字母w就可以了,而不需要转换为完整的拼音wang)。对此,我们找到了一个简便的解决办法:一个老外(代码中签名的作者叫George)用c语言写了一个pinyinFirstLetter函数用于获取中文拼音首字母。
这个函数主要基于一个巨大的c语言char数组,把unicode字符集中所有中文的拼音首字母都映射进去了。
pinyinFirstLetter基于这么一个简单的原理:我们知道,在Objective C语言中,字符串是以unicode进行编码的。在unicode字符集中,汉字的编码范围为4E00 到 9FA5 之间(即从第19968开始的20902个字符是中文简体字符)。我们把这些字符的拼音首字母按照顺序都存放在一个char数组中。当我们查找一个汉字的拼音首字母时,只需把这个汉字的unicode码(即char强制转换为int)减去19968,然后用这个数字作为索引去找char数组中存放的字母即可。
就这样,有这个char数组为基础,一切都变得非常简单:
char pinyinFirstLetter(unsignedshort hanzi)
{
int index = hanzi - HANZI_START;
if (index >= 0&& index <= HANZI_COUNT)
{
returnfirstLetterArray[index];
}
else
{
return hanzi;
}
}
至于排序,我们可以把要排序的中文(为简便起见,我们假设这些要排序的中文都只有一个字)放到NSArray中,然后利用NSArray的sortedArrayUsingComparator:方法进行排序即可。sortedArrayUsingComparator:方法是NSArray内部元素的比较方法。你只需要为这个方法提供一个块作为参数即可。然后在这个块中,对两个元素的大小进行比较,并返回一个NSComparisonResult(NSComparisonResult枚举用于表示比较的结果:等于、小于、大于):
NSArray *sortedArray=[mArray sortedArrayUsingComparator:^(id a, id b) {
char c1=pinyinFirstLetter([(NSString*)a characterAtIndex:0]);
char c2=pinyinFirstLetter([(NSString*)b characterAtIndex:0]);
NSString* s1=[[NSStringstringWithFormat:@"%c",c1] uppercaseString];
NSString* s2=[[NSStringstringWithFormat:@"%c",c2] uppercaseString];
return [s1 compare:s2];
}];
下面是程序运行的效果。你在“中文”一栏中,输入几个中文,然后点击“转换”按钮,在下面“排序结果”一栏中显示出这个几个中文的首字母排序结果。
为简便起见,我们没有对第2个字母进行排序。因为这要求我们把每个中文的全拼映射到char数组中,这样数组的大小会膨胀到一个可怕的数字。
http://blog.csdn.net/kmyhy/article/details/7419208
- 中文首字母 排序
- 中文首字母 排序
- pinyin中文首字母排序
- 中文首字母 排序
- C#中文首字母排序
- android中文首字母排序、分割
- SQL 按照中文首字母排序
- mysql按中文首字母排序
- Android 按中文首字母排序
- java 按照中文首字母排序
- java 中文首字母分组,排序
- MYSQL按中文首字母排序
- java实现中文汉字的首字母排序
- java实现中文汉字的首字母排序
- 【Java】实现按中文首字母排序
- java中中文字符串按首字母排序
- java实现中文汉字的首字母排序
- java实现中文汉字按首字母排序
- 网页自动跳转代码搜集
- jmeter使用
- C#与C/C++的交互 转自(warensoft)
- 一步步优化JVM一:概述、方法及需求
- UVA - 11666 Logarithms
- 中文首字母 排序
- 数据查询之子查询和嵌套查询
- ASP.NET利用URLRewriter重写url地址
- (错误)检测到LoaderLock
- 一步步优化JVM二:JVM部署模型和JVM Runtime
- 将Panel 置于最顶层
- 在 Java 应用程序中定时执行任务
- oracle 建表空间和用户
- 可信软件方法学习