按照拼音对数组中的中文字符串排序的算法,不是很难,这里直接放上代码,Demo去最下面找:
注:里面用到一个叫George的牛人写的中文转拼音首字母的函数pinyinFirstLetter,因为内容实在是太多了就不贴上来了。
里面还用到一个叫ChineseString的类,里面只有两个NSString对象(string和pinYin)用于存放原字符串和字符串中每个字的拼音首字母

复制代码

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

输出结果这里也贴上了:

Demo:  ChineseSort.zip (78 K) 下载次数:1268

按照拼音对数组中的中文字符串排序的算法相关推荐

  1. Golang中获取中文字符串的子串字符位置及截取子串

    Golang中获取中文字符串的子串字符位置及截取子串 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.cs ...

  2. python字符串数组中最短的_python求解数组中两个字符串的最小距离

    题目: 给定一个数组 strs,其中的数据都是字符串,给定两个字符串 str1,str2.如果这两个字符串都在 strs数组中,就返回它们之间的最小距离:如果其中任何一个不在里面,则返回 -1:如果两 ...

  3. 在一个JS文件中包含中文字符串,通过innerHTML输出后中文乱码?

    在一个JS文件中包含中文字符串,通过innerHTML输出后中文乱码? Posted on 2008-07-13 12:00 尹合磊 阅读(1902) 评论(0)  编辑 收藏 所属分类: ASP.N ...

  4. 使用C#删除一个字符串数组中的空字符串

    C#中要如何才能删除一个字符串数组中的空字符串呢?随着微软对C#不断发展和更新,C#中对于数组操作的方式也变得越来越多样化.以往要实现过滤数组中的空字符串,都是需要实行循环的方式来排除和过滤.C#3. ...

  5. 检查数组中的子字符串– Java,Python和Swift

    In this quick tutorial, we'll learn how to quickly search a part of a string in an Array. We'll be d ...

  6. Swift 5 判断数组中是否包含字符串,忽略大小写

    系统: Mac OS 10.15.2, XCode 11.3,swift 5.0 写作时间:2020-01-08 说明 Swift 5 判断数组中是否包含字符串,忽略大小写 let list = [& ...

  7. 如何提取代码中的中文字符串

    前言 在一般情况下,程序中的中文字符串都是写在某个文件中读取(例如json),但是大部分时候我们都是直接写入到代码中,这个时候如果我们想把字符串提取出来就需要一个一个去找,或者通过IDE提供的字符串匹 ...

  8. Java循环判断数组中是否包含字符串

    关于Java循环判断数组中是否包含字符串的方法: // 循环判断数组中是否包含字符串public static boolean useLoop(String[] arr, String targetV ...

  9. JavaScript - 移除数组中的空字符串元素

    移除数组中的空字符串元素 使用 filter 方法对数组进行拷贝,删除空字符串元素,保留其他元素(第 22 ~ 24 行): <!DOCTYPE html> <html>< ...

最新文章

  1. 《笑谈银行IT》—畅谈“银行IT系统”
  2. 如何使用Laravel Debugbar?
  3. 世界无烟日丨如何科学戒烟?
  4. mysql级联查询_mysql 各种级联查询后更新(update select)
  5. 1125 Chain the Ropes (25 分)【难度: 一般 / 贪心 哈夫曼树】
  6. mac查看端口,关闭进程
  7. 关于resolve非泛型方法不能与类型实参一起使用
  8. 基于区块链的思考与创新应用实践
  9. 远程桌面和云主机,可以听到云主机内部的声音
  10. 九章基础算法04:二叉搜索树与哈希表
  11. 1005 地球人口承载力估计
  12. CloudFlare Full SSL Strict 报错提示 Error 525 SSL handshake failed
  13. ubuntu20.04下rabbitvcs使用svn无法保存密码
  14. java poi 合并单元格
  15. Error:(3, 50) java: 程序包com.n.c.caa.cds.commons.constants不存在
  16. 超详细mac新手教程,让你离熟练操作mac只需十分钟!
  17. C语言程序设计-现代方法 第二版 第6.1小节 显示平方表
  18. 高等工程数学 —— 第一章 (1)距离与范数
  19. 跟偶一起做:击退眼睛疲劳的五大运动
  20. 黑客正利用“Black Lives Matter”政治口号传播恶意软件

热门文章

  1. ThingWorx中的Date操作
  2. Python:数据降序排列索引
  3. JVM内存和垃圾回收-02.类加载子系统
  4. html5 sencha,HTML5开发实战——Sencha Touch篇(1)
  5. 我是怎么定位线上问题的?
  6. dns劫持解决办法、dns劫持是什么、dns劫持原理
  7. XYplorer 20.90.0900中文版 — 资源管理器
  8. 杨洋告诉你实时异地容灾的重要性
  9. 数据库相关基础知识总结
  10. Security Warning: The negotiated TLS 1.0 is an insecure protocol and is supported for backward compa