iOS-汉字排序
* 在IOS开发过程中,排序是我们经常遇到的问题,那么如何进行排序呢?
* 在英文状态下,系统中有直接可以调用的方法。
例如:对数组[sss, aaa, bbb, ppp]进行排序,我们可以直接使用系统方法。
NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"sss",@"aaa",@"bbb",@"ppp",nil];
array = (NSMutableArray *)[array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",array);
上面代码的运行结果为:aaa, bbb, ppp, sss
* 但是如果上面的数组中出现汉语字符,排序就会出现问题,那么在汉语数组中如何进行排序呢?
在汉字字符串排序,因为编码问题,不能直接对汉字字符串进行直接排序。
想要对汉字进行排序,我们需要做一下准备。
1.将汉字转化成相应的拼音。
2.根据拼音将汉字排序。
一:汉字转化成相应的拼音:(例如:"编码改变世界"要转化成“bianmagaibianshijie”)
将汉语转化成拼音,有很多方法,有第三方库实现,也有系统自带的方法实现。
第三方转化的比较常用的是由George编写的,使用起来比较方便,这个库转化是将汉字转化成汉字的拼音首字母。有兴趣的同学可以自行搜索这个文件。
将汉字转化成拼音,系统为我们提供了这一个方法,使用起来非常的方便,既然系统有这个方法,何必再找第三方库呢?
下面是将汉字转化成拼音的代码:
NSMutableString *mutableString = [NSMutableString stringWithString:@"编码改变世界"];
CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformToLatin, false);
CFStringTransform((CFMutableStringRef)mutableString, NULL, kCFStringTransformStripDiacritics, false);
NSLog(@"%@",mutableString);
上面代码的运行结果为:bian ma gai bian shi jie
可以看出上面的结果中间中间有很多的空格,我们在排序的过程中需要将中间的空格去掉。代码如下:
mutableString =(NSMutableString *)[mutableString stringByReplacingOccurrencesOfString:@" " withString:@""];
到此为止我们已经将汉字转化成相应的拼音了,但是如何根据拼音将汉字排序呢?
二.根据汉语拼音将数组排序;例如汉字为[“马云”,“诸葛亮”,“王朝阳”],拼音为:[‘mayun’,'zhugeliang','wangzhaoyang']
我们想要得到的顺序应该是[“马云,”“王朝阳”,“诸葛亮”],这样的顺序,现在我们怎样根据拼音将汉字数组排序呢?
说道此处,我们不得不提一个类,它就是NSSortDescroptor,关于这个类的方法理论在此不具体详述,仅用代码演示它的作用。
首先我们先创建一个新的类:people,他有两个属性,一个Chinese,一个pinYin
分别代表汉字,和拼音。
代码如下:(在此假设汉字已经转化成拼音)
NSMutableArray *array = [[NSMutableArray alloc]init];
NSArray *arrayChinese = [NSArray arrayWithObjects:@"马云",@"诸葛亮",@"王朝阳", nil];
NSArray *arrayPinyin = [NSArray arrayWithObjects:@"mayun",@"zhugeliang",@"wangzhaoyang", nil];
for (int i = ; i < arrayChinese.count; i ++)
{
people *p = [[people alloc]init];
p.chinese = arrayChinese[i];
p.pinyin = arrayPinyin[i];
[array addObject:p];
}
NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinyin" ascending:YES]];
[array sortUsingDescriptors:sortDescriptors];
for (int i = ; i < arrayChinese.count; i ++)
{
people *p = array[i];
NSLog(@"----%@",p.chinese);
}
上述代码运行结果为:马云,王朝阳,诸葛亮
iOS-汉字排序的更多相关文章
- Java汉字排序(3)按笔划排序
对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画. 本文就讲述如何实现按笔划排序的比较器(Comparator). 作者:Jeff 发表于:2007年12月21日 11:27 最 ...
- Java汉字排序(2)按拼音排序
对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画. 本文就讲述如何实现按拼音排序的比较器(Comparator). 作者:Jeff 发表于:2007年12月21日 11:27 最 ...
- php 汉字排序
<?phpheader("content-type:text/html;charset=utf-8");$array=array('重庆市','上海市','安徽省','吉林省 ...
- NSArray利用Cocoa框架进行汉字排序
NSArray利用Cocoa框架进行汉字排序 在NSString有一个函数localizedCompare:,它的功能是通过自身与给定字符串的比較,返回一个本地化的比較结果.也就是说这个函数是支持汉字 ...
- ios 汉字字符串数组拼音排序
ios没有提供简单的汉字拼音排序方法,在网上看到了oc方法,这里写以下对应的swift方法 var stringCompareBlock: (String,String)->Bool = { ( ...
- Jtable 表格按多列排序(支持中文汉字排序)
这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求.由于我是大神,所以必须做了出来.ok,不自恋 ...
- MySQL按照汉字的拼音排序,mysql汉字排序
按照汉字的拼音排序,用的比较多是在人名的排序中,按照姓氏的拼音字母,从A到Z排序: 如果存储姓名的字段采用的是GBK字符集,那就好办了,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字37 ...
- Java汉字排序(1)排序前要了解的知识(数组和list的排序接口)
对于包含汉字的字符串来说,排序的方式主要有两种:一种是拼音,一种是笔画. 本文就讲述如何实现按拼音排序的比较器(Comparator). 作者:Jeff 发表于:2007年12月21日 11:27 最 ...
- [转]IOS 中文排序
转自:http://www.cnblogs.com/syxchina/archive/2012/10/11/2720257.html 1 原因 Ios默认使用utf-8格式编码,所以中文在IOS中默认 ...
- NSArray进行汉字排序
由于NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完毕按A~Z的排序,这看起来是个头疼的问题.由于牵扯到汉字转为拼音,kmyhy给出一个较易实现的方法,获取汉字的首字的首字母,如将 ...
随机推荐
- 四、filter和find函数的区别
filter(): filter函数会返回data中为true那项的数组(即查询符合条件的数据) eg:data.filter((f)=>{ if(f[name]===item[name]){ ...
- 将数据表中的数据添加到ComboBox控件中
实现效果: 知识运用: ComboBox控件的DataSource 属性 //获取或设置ComboBox的数据源 public Object DataResouce{get;set;} //属性值:任 ...
- stixel 理解
在车辆所处平面建立极坐标占位网格(polar occupancy grid),将视差图所代表的三维世界(3D world) 正交投影到该平面中. occupancy:每个网格被赋予一个占位数,代表了该 ...
- python之*的魔性用法
1. *在函数中的作用 聚合 在函数定义时聚合 def eat(args): print('我请你吃:',args) eat('蒸羊羔儿') # 输出结果 # 我请你吃: 蒸羊羔儿 打散 在函数执行时 ...
- 二叉树、二叉搜索树、平衡二叉树、B树、B+树的精确定义和区别探究
概述 关于树的概念很多,B树,B+树,红黑树等等. 但是你去翻翻百度百科,或者用百度或者谷歌搜索一下中文的树结构的介绍,全都是狗屁.没有哪个中文网站是真正精确解释树的定义的,尤其是百度百科. 下面我要 ...
- (69)zabbix监控惠普打印机
假设公司有多个楼层或者分布在不同楼,打印机自然分布很广泛,打印机缺少油墨或者卡纸了,都需要员工找IT部门.我们使用zabbix对打印机进行监控,一旦缺少油墨,zabbix发出报警,it人员能够及时更换 ...
- init0-6(启动级别)
一. init是Linux系统操作中不可缺少的程序之一. 所谓的init进程,它是一个由内核启动的用户级进程. 内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后, ...
- Meteor Shower POJ - 3669 (bfs+优先队列)
Meteor Shower Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26455 Accepted: 6856 De ...
- nmap命令扫描存活主机
1.ping扫描:扫描192.168.0.0/24网段上有哪些主机是存活的: [root@laolinux ~]# nmap -sP 192.168.0.0/24 Starting Nmap 4. ...
- Win7里IIS7部署WebService
最近忙于一个Web的Bug修正,是先人写的一个东东,架构很简单,一个前端的项目,一个WebService的项目,以及后台的一些dll.之前一直很排斥这个产品,因为它没法启动,印象中没有跑得起来过的时候 ...