IOS-汉字排序

* 在IOS开发过程中,排序是我们经常遇到的问题,那么如何进行排序呢?

* 在英文状态下,系统中有直接可以调用的方法。

   例如:对数组[sss, aaa, bbb, ppp]进行排序,我们可以直接使用系统方法。

1 NSMutableArray * array = [[NSMutableArray alloc]initWithObjects:@"sss",@"aaa",@"bbb",@"ppp",nil];
2 array = (NSMutableArray *)[array sortedArrayUsingSelector:@selector(compare:)];
3 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

分别代表汉字,和拼音。

代码如下:(在此假设汉字已经转化成拼音)

 1 NSMutableArray *array = [[NSMutableArray alloc]init];
 2 NSArray *arrayChinese = [NSArray arrayWithObjects:@"马云",@"诸葛亮",@"王朝阳", nil];
 3 NSArray *arrayPinyin = [NSArray arrayWithObjects:@"mayun",@"zhugeliang",@"wangzhaoyang", nil];
 4 for (int i = 0; i < arrayChinese.count; i ++)
 5 {
 6         people *p = [[people alloc]init];
 7         p.chinese = arrayChinese[i];
 8         p.pinyin = arrayPinyin[i];
 9         [array addObject:p];
10 }
11 NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinyin" ascending:YES]];
12     [array sortUsingDescriptors:sortDescriptors];
13 for (int i = 0; i < arrayChinese.count; i ++)
14 {
15         people *p = array[i];
16         NSLog(@"----%@",p.chinese);
17 }

上述代码运行结果为:马云,王朝阳,诸葛亮

时间: 2024-11-15 15:27:33

IOS-汉字排序的相关文章

NSArray利用Cocoa框架进行汉字排序

NSArray利用Cocoa框架进行汉字排序 在NSString有一个函数localizedCompare:,它的功能是通过自身与给定字符串的比較,返回一个本地化的比較结果.也就是说这个函数是支持汉字比較的. Student.h @interface Student : NSObject @property(nonatomic,copy)NSString *stuName; @property(nonatomic,assign)CGFloat stuScore; @property(nonato

ios汉字转拼音首字母

ios汉字转拼音首字母 //获取拼音首字母(传入汉字字符串, 返回大写拼音首字母) - (NSString *)firstCharactor:(NSString *)aString { //转成了可变字符串 NSMutableString *str = [NSMutableString stringWithString:aString]; //先转换为带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransform

oracle数据库中文汉字排序

oracle数据库中文汉字排序 今天需要按oracle数据库中某个表的某个中文字段进行排序,本来感觉挺简单的一个东西,不就是一个order by嘛,可是写完了发现拍的并不对,一时间感到不可思议,又查询,发现果然有这个问题,经过查资料发现,Oracle对中文的排序是按照ASC码的值进行排序的,后来又经过查阅资料发现了一个他的函数 1.按照拼音排序: select * from your_table_name t order by nlssort(t.ordered_column_name,'NLS

ios 汉字字符串数组拼音排序

ios没有提供简单的汉字拼音排序方法,在网上看到了oc方法,这里写以下对应的swift方法 var stringCompareBlock: (String,String)->Bool = { (str1:String, str2:String) -> Bool in var nsStr1 = str1 as NSString var nsStr2 = str2 as NSString var encode:NSStringEncoding = CFStringConvertEncodingTo

WPF中,使用ICollectionView进行排序时,汉字排序出现问题的解决

事情的起因是这样的,因为开发一个软件项目,其中用到了DataGrid控件,然后客户需要点击控件的列头,对内容进行排序,其实内容倒是蛮简单的(纯字符串),咋一看起来,实现应该很简单,应该直接将字符串进行排序显示就完了,于是就写成了类似于这样的代码(这里只是模拟一下,a只是简简单单的包含一个类型为string的公共属性s): a[] aas = new a[] { new a("scjaosinf"), new a("aedfbsdf"), new a("eg

NSArray进行汉字排序

因为NSArray并不直接支持对汉字的排序,这就要通过将汉字转换成拼音完成按A~Z的排序,这看起来是个头疼的问题,因为牵扯到汉字转为拼音,kmyhy给出一个较易实现的方法,获取汉字的首字的首字母,如将"王"变成"W". 其中他通过pinyinFirstLetter函数获取中文拼音,函数原理是:"pinyinFirstLetter基于这么一个简单的原理:我们知道,在Objective C语言中,字符串是以unicode进行编码的.在unicode字符集中,汉

IOS中文排序学习

前言: 最近有中文排序的需要,发现系统没有提供中文排序的方法,于是参考学习了网上前辈的代码实现了中文排序功能,本文记录的就是学习实现中文排序的过程. 实现英文排序 系统提供了英文排序的方法.写了一个逆的数组,排序后正序: // 数组英文begin NSMutableArray *dataArray=[NSMutableArray array]; [dataArray addObjectsFromArray:@[@"d",@"c",@"b",@&q

汉字转拼音 汉字排序功能

.h文件 #import <Foundation/Foundation.h> @interface ChineseTool : NSObject /** *  汉字转拼音 * *  @param chinese         要转换的汉字 *  @param stripDiacritics 是否需要音标 * *  @return 拼音 */ + (NSString *)pinyinForChinese:(NSString *)chinese stripDiacritics:(BOOL)str

iOS 中文排序

这里分享一个中文排序的一个便捷方法,整理了一个网络的资源自己封装成一个类别方便以后使用, 这里贴出使用的方法,源码可以在本文最后下载. 要记得加头文件 #import "NSArray+SortedChinAndEng.h" 这个头文件在源码中. NSArray *[email protected][ @"小明", @"微博", @"你好", @"小米", @"腾讯", @"再

【推荐】iOS汉字转拼音第三方库

PinYin4Objc是一个在git汉字转拼音的开源库,支持简体和繁体中文.效率POAPinyin等其他库要高,转换库也完整下面简单介绍 实现原理 使用unicode_to_hanyu_pinyin.txt存储汉字编码相对应的拼音,以字典加载到内存中 NSString *resourceName =[[NSBundle mainBundle] pathForResource:@"unicode_to_hanyu_pinyin" ofType:@"txt"]; NSS