ios 按照拼音对数组中的中文字符串排序的算法

来源:互联网 发布:知乎 神回复 编辑:程序博客网 时间:2024/05/16 13:59
  1.  //Step1:初始化
  2.         NSMutableArray *stringsToSort=[NSArray arrayWithObjects:
  3.                                 @"电脑",
  4.                                 @"显示器",
  5.                                 @"你好",
  6.                                 @"推特",
  7.                                 @"乔布斯",
  8.                                 @"再见",
  9.                                 @"暑假作业",
  10.                                 @"键盘",
  11.                                 @"鼠标",
  12.                                 @"谷歌",
  13.                                 @"苹果",
  14.                                 nil];
  15.         
  16.         //Step1输出
  17.         NSLog(@"尚未排序的NSString数组:");
  18.         for(int i=0;i<[stringsToSort count];i++){
  19.             NSLog(@"%@",[stringsToSort objectAtIndex:i]);
  20.         }
  21.         
  22.         
  23.         //Step2:获取字符串中文字的拼音首字母并与字符串共同存放
  24.         NSMutableArray *chineseStringsArray=[NSMutableArray array];
  25.         for(int i=0;i<[stringsToSort count];i++){
  26.             ChineseString *chineseString=[[ChineseString alloc]init];
  27.             
  28.             chineseString.string=[NSString stringWithString:[stringsToSort objectAtIndex:i]];
  29.             
  30.             if(chineseString.string==nil){
  31.                 chineseString.string=@"";
  32.             }
  33.             
  34.             if(![chineseString.string isEqualToString:@""]){
  35.                 NSString *pinYinResult=[NSString string];
  36.                 for(int j=0;j<chineseString.string.length;j++){
  37.                     NSString *singlePinyinLetter=[[NSString stringWithFormat:@"%c",pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString];
  38.                     
  39.                     pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];
  40.                 }
  41.                 chineseString.pinYin=pinYinResult;
  42.             }else{
  43.                 chineseString.pinYin=@"";
  44.             }
  45.             [chineseStringsArray addObject:chineseString];
  46.         }
  47.         
  48.         //Step2输出
  49.         NSLog(@"\n\n\n转换为拼音首字母后的NSString数组");
  50.         for(int i=0;i<[chineseStringsArray count];i++){
  51.             ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
  52.             NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
  53.         }
  54.         
  55.         
  56.         
  57.         //Step3:按照拼音首字母对这些Strings进行排序
  58.         NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];
  59.         [chineseStringsArray sortUsingDescriptors:sortDescriptors];
  60.         
  61.         //Step3输出
  62.         NSLog(@"\n\n\n按照拼音首字母后的NSString数组");
  63.         for(int i=0;i<[chineseStringsArray count];i++){
  64.             ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];
  65.             NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);
  66.         }
  67.         
  68.         // Step4:如果有需要,再把排序好的内容从ChineseString类中提取出来
  69.         NSMutableArray *result=[NSMutableArray array];
  70.         for(int i=0;i<[chineseStringsArray count];i++){
  71.             [result addObject:((ChineseString*)[chineseStringsArray objectAtIndex:i]).string];
  72.         }
  73.         
  74.         //Step4输出
  75.         NSLog(@"\n\n\n最终结果:");
  76.         for(int i=0;i<[result count];i++){
  77.             NSLog(@"%@",[result objectAtIndex:i]);
  78.         }
  79.         
  80.         //程序结束
  81.         
  82.         NSLog(@"\n\n\nDemo By Hxy060799");
原创粉丝点击