中文首字母 排序

因项目需要对通讯录中的联系人进行排序,需要对中文字符进行拼音转换。其实这个转换并没有想象中的那么难(因为我们只是把中文转为拼音首字母而已,比如“王”转换为字母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];

}];

下面是程序运行的效果。你在“中文”一栏中,输入几个中文,然后点击“转换”按钮,在下面“排序结果”一栏中显示出这个几个中文的首字母排序结果。

时间: 2024-10-14 19:10:12

中文首字母 排序的相关文章

php按照中文首字母排序

1> 网络上很多php的工具类可以将汉字转为拼音: 2> 将拼音进行排序即可 另一种则是类似mysql转码方式: 1 foreach ($array as $key=>$value) 2 { 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value); 4 } 1 foreach ($array as $key=>$value) 2 { 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value);

js中文首字母排序(一)

sort()localeCompare() sort()使用,sort()函数会对使用的数组对象进行排序,排序规则安装字符编码顺序排序, 如:(无法直接比较中文) var arr = new Array(6); arr[0] = "23" arr[1] = "1" arr[2] = "8" arr[3] = "25" arr[4] = "1000" arr[5] = "1" arr.so

oc中文首字母排序

NSArray *[email protected][@"小雨",@"安安",@"小风",@"荣荣",@"张涛",@"李文荣"]; NSComparator sortblock1=^(id obj1,id obj2){ return [obj1 localizedCompare:obj2]; }; NSArray *sortarray1=[arr2 sortedArrayUsingCom

ORACLE根据中文拼音首字母排序、取得中文拼音首字母函数

根据中文拼音首字母排序.取得中文拼音首字母函数     介绍根据中文的首字母.笔画.部首排序函数[NLSSORT]:           1).首字母           SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_PINYIN_M');           2).笔画     SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_STRO

关于java中实现在oracle数据库中实现对中文首字母进行排序的解决方案

首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值     SCHINESE_RADICAL_M   按照部首(第一顺序).笔划(第二顺序)排序     SCHINESE_STROKE_M   按照笔划(第一顺序).部首(第二顺序)排序     SCHINESE_PINYIN_M   按照拼音排序 oracle9i中新增了按照拼音.部首.笔画排序功能 用法示例: Java代码   拼音 SEL

网络获取数组信息,根据姓名按首字母排序 添加侧滑删除。

package jianlemeistaff.app.jlm.com.jianlemeistaff.activity; import android.app.Activity; import android.content.Intent; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.Gravi

HashMap加入数据后,会自动根据首字母排序

1.Map<String, ArrayList<XX>> entityHashMap = new HashMap<>(); 然后增加一些数据,会发现根据String键值排序,并不是增加的时候的顺序, 如果是中文,会按汉字的拼音首字母排序. 2.解决方法: Map<String, ArrayList<WXsd>> entityHashMap = new LinkedHashMap<>(); 只要将HashMap==>LinkedH

Java编程实现中英混合字符串数组按首字母排序的方法

在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: ? 1 2 3 4 5 6 7 String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反对高铁"

Oracle 10g如何对用户姓名,按首字母排序、查询

首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值     SCHINESE_RADICAL_M   按照部首(第一顺序).笔划(第二顺序)排序     SCHINESE_STROKE_M   按照笔划(第一顺序).部首(第二顺序)排序     SCHINESE_PINYIN_M   按照拼音排序 oracle9i中新增了按照拼音.部首.笔画排序功能 用法示例: 拼音 SELECT * FRO