zoukankan      html  css  js  c++  java
  • [转]IOS 中文排序

    转自:http://www.cnblogs.com/syxchina/archive/2012/10/11/2720257.html

    1 原因

    Ios默认使用utf-8格式编码,所以中文在IOS中默认排序是不可以用的,但IOS也支持使用笔画排序的(采用NSString的localizedCompare,可按笔划排序),但我们希望根据拼音排序,并且如果相同可以往后继续比较。详见:

    http://space.itpub.net/29867/viewspace-688829

    http://www.cnblogs.com/kuku/archive/2012/08/19/2646063.html

    2 使用拼音对数组中的中文字符排序

    参考:http://www.cocoachina.com/bbs/read.php?tid-111709.html

    使用效果:

    使用代码:

    复制代码
     1 #import <Foundation/Foundation.h>
     2 #import "ChineseString.h"
     3 #import "pinyin.h"
     4 
     5 int main(int argc, const char * argv[])
     6 {
     7     @autoreleasepool{
     8         
     9         //结果请看输出
    10         
    11         //Step1:初始化
    12         NSMutableArray *stringsToSort=[NSArray arrayWithObjects:
    13                                 @"电脑",
    14                                 @"显示器",
    15                                 @"你好",
    16                                 @"推特",
    17                                 @"乔布斯",
    18                                 @"再见",
    19                                 @"暑假作业",
    20                                 @"键盘",
    21                                 @"鼠标",
    22                                 @"谷歌",
    23                                 @"苹果",
    24                                 nil];
    25         
    26         //Step1输出
    27         NSLog(@"尚未排序的NSString数组:");
    28         for(int i=0;i<[stringsToSort count];i++){
    29             NSLog(@"%@",[stringsToSort objectAtIndex:i]);
    30         }
    31         
    32 
    33         
    34         //Step2:获取字符串中文字的拼音首字母并与字符串共同存放
    35         NSMutableArray *chineseStringsArray=[NSMutableArray array];
    36         for(int i=0;i<[stringsToSort count];i++){
    37             ChineseString *chineseString=[[ChineseString alloc]init];
    38             
    39             chineseString.string=[NSString stringWithString:[stringsToSort objectAtIndex:i]];
    40             
    41             if(chineseString.string==nil){
    42                 chineseString.string=@"";
    43             }
    44             
    45             if(![chineseString.string isEqualToString:@""]){
    46                 NSString *pinYinResult=[NSString string];
    47                 for(int j=0;j<chineseString.string.length;j++){
    48                     NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];
    49                     
    50                     pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];
    51                 }
    52                 chineseString.pinYin=pinYinResult;
    53             }else{
    54                 chineseString.pinYin=@"";
    55             }
    56             [chineseStringsArray addObject:chineseString];
    57         }
    58         
    59         //Step2输出
    60         NSLog(@"
    
    
    转换为拼音首字母后的NSString数组");
    61         for(int i=0;i<[chineseStringsArray count];i++){
    62             ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
    63             NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
    64         }
    65         
    66         
    67         
    68         //Step3:按照拼音首字母对这些Strings进行排序
    69         NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];
    70         [chineseStringsArray sortUsingDescriptors:sortDescriptors];
    71         
    72         //Step3输出
    73         NSLog(@"
    
    
    按照拼音首字母后的NSString数组");
    74         for(int i=0;i<[chineseStringsArray count];i++){
    75             ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
    76             NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
    77         }
    78         
    79         // Step4:如果有需要,再把排序好的内容从ChineseString类中提取出来
    80         NSMutableArray *result=[NSMutableArray array];
    81         for(int i=0;i<[chineseStringsArray count];i++){
    82             [result addObject:((ChineseString*)[chineseStringsArray objectAtIndex:i]).string];
    83         }
    84         
    85         //Step4输出
    86         NSLog(@"
    
    
    最终结果:");
    87         for(int i=0;i<[result count];i++){
    88             NSLog(@"%@",[result objectAtIndex:i]);
    89         }
    90         
    91         //程序结束
    92         
    93         NSLog(@"
    
    
    Demo By Hxy060799");
    94     }
    95     return 0;
    96 }
  • 相关阅读:
    Linux的JVM可以从SUN网站上下载
    实践是最好的老师
    SCAU 8624 多项式系数累加和
    SCAU 8617 阶乘数字和 (水题)
    SCAU 8614 素数
    SCAU 8619 公约公倍
    HDU ACM 1106 排序
    Uva 465 Overflow
    SCAU 8611 大牛之路I
    SCAU 9501 ACMer不得不知道的事儿
  • 原文地址:https://www.cnblogs.com/haibosoft/p/3669009.html
Copyright © 2011-2022 走看看