中文首字母 排序

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

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

PHP程序,中文首字母排序

问题描述 PHP程序,中文首字母排序 中文首字母排序 $arr = array( array( 'name' => '学习' 'size' => '1235' 'type' => 'jpe' 'time' => '1921-11-13' ) array( 'name' => '世界' 'size' => '153' 'type' => 'jpe' 'time' => '2005-11-13' ) array( 'name' => '编程' 'size'

Java实现按中文首字母排序的具体实例_java

要实现"按中文首字母排序"操作,可以使用java.util包下的Arrays类的sort()函数. Arrays类包含用来操作数组(比如排序和搜索)的各种方法. 比如对于排序操作的sort()函数,重载了多种静态函数以适应不同情况下的需要. 以下,我们应用最后一个重载函数来实现"按中文首字母排序": 复制代码 代码如下: sort(T[] a, Comparator<? super T> c)   根据指定比较器产生的顺序对指定对象数组进行排序.  代码

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

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

ios-根据首字母排序NSArray

问题描述 根据首字母排序NSArray 我的NSArray大概这样: contactNamesArray = [[NSMutableArray alloc] initWithObjects:@"John Galt", @"Michael Wales", @"James Joyce", @"Shakespeare", nil]; 我想实现一个NSArray,全部都有相同的值,看上去: newContactNamesArray =

横向滑动-Android中用首字母排序的listview中的item的滑动监听与listview的上下滑动冲突

问题描述 Android中用首字母排序的listview中的item的滑动监听与listview的上下滑动冲突 大神帮看看,我现在listview的item中我写了一个OnTouchListener,但是发现横向滑动的时候老是会触发listview的上下滑动事件,导致横向滑动很难滑出来,但是滑出来第一次后,后面就很容易划出来了!大神帮忙看看!!!感谢! 让人很是苦恼,这个该怎么处理呢?查过资料说改返回值为false,改了都滑不出来! /** * 侧滑显示删除按钮 */ private View.

IOS中获取本地通讯录联系人以及汉字首字母排序_IOS

iOS中获取手机通讯录中的联系人信息: /*** 加载本地联系人*/ - (void)loadLocalContacts { //新建一个通讯录类 ABAddressBookRef addressBooks = nil; if (DeviceVersion < 6.0) { addressBooks = ABAddressBookCreate(); } else { addressBooks = ABAddressBookCreateWithOptions(NULL, NULL); //获取通讯

mysql自定义函数实现中文首字母拼音查询

例子1 mysql功能函数 实现拼音查询: 功能:输入中文字符串每个字的首字母,即可检索出相应数据. 使用方法:直接使用py(字段名)='keywords',即可.  代码如下 复制代码 DELIMITER $$ CREATE FUNCTION `PYFIRST`(P_NAME VARCHAR(255)) RETURNS varchar(255) CHARSET utf8  BEGIN      DECLARE V_RETURN VARCHAR(255);      SET V_RETURN =

python中合并两个文本文件并按照姓名首字母排序的例子_python

前段时间前在网上看到一段面试题,要求如下: employee文件中记录了工号和姓名 复制代码 代码如下:     cat employee.txt:        100 Jason Smith        200 John Doe        300 Sanjay Gupta        400 Ashok Sharma bonus文件中记录工号和工资 复制代码 代码如下:     cat bonus.txt:        100 $5,000        200 $500     

java实现中文汉字的首字母排序

java中可以排序的工具类和接口共有五个SortedMap .SortedSet.TreeMap .TreeSet和Collections,Collections中需要显式调用sort()方法. 事例如下: Java代码 import java.util.List; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import myUtil.myArrayComparator;