zoukankan      html  css  js  c++  java
  • 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 }

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

       

  • 相关阅读:
    SQLite的总结与在C#的使用
    Linq中比较字符串类型的日期
    C#中委托,匿名函数,lamda表达式复习
    MYSQL中SUM (IF())
    C#在属性中用Lambda语法
    Mysql绿色版安装和遇到的问题
    FormsAuthentication权限管理
    存储过程中高性能安全式SQL拼接
    JavaScript实现搜索联想功能
    JavaScript组成
  • 原文地址:https://www.cnblogs.com/wangyaoguo/p/4805269.html
Copyright © 2011-2022 走看看