转自: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(@"\n\n\n转换为拼音首字母后的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(@"\n\n\n按照拼音首字母后的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(@"\n\n\n最终结果:");
87 for(int i=0;i<[result count];i++){
88 NSLog(@"%@",[result objectAtIndex:i]);
89 }
90
91 //程序结束
92
93 NSLog(@"\n\n\nDemo By Hxy060799");
94 }
95 return 0;
96 }

[转]IOS 中文排序的更多相关文章

  1. SQLite中文排序

    定义一个类: using System.Data.SQLite; namespace DAL { /// <summary> /// SQLite中文排序 /// </summary ...

  2. 转!!mysql order by 中文排序

    1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...

  3. PHP/MYSQL UTF8 中文排序

    1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用asort排序不行.用gbk和gb2312可以.这跟几种格式的编码有关系.gbk和gb2312本身的编码就是用拼音排序的. f ...

  4. ORACLE的order by中文排序

    在使用order by排序的时候,出现如下情况:   印象中中文排序应该默认是按照拼音排序的,为何"鑫"会排在"中"的后面呢?猜想order by是不是根据对应 ...

  5. hibernate 用hql做中文排序

    用Hibernate+MySQL的童鞋是不是非常苦恼为什么MySQL不支持中文排序呢?没办法.仅仅有等utf8_unicode_cn 出来了.假设用hibernate即想实现跨库,又想不改代码怎样实现 ...

  6. jQuery的dataTables插件实现中文排序

    最近在写Java web. 写JSP的时候发现一个很好玩的插件dataTables.分页.过滤.排序等等手到擒来. 哎哎哎,有点点可惜的是排序这个功能不支持中文.于是网上查查找找,现在把方法整理一下, ...

  7. TreeMap中文排序,TreeMap倒序输出排列

    1.TreeMap集合倒序排列 import java.util.Comparator; /** * 比较算法的类,比较器 * @author Administrator * */ public cl ...

  8. mysql order by 中文 排序

    mysql order by 中文 排序 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都 ...

  9. PHP与MYSQL中UTF8 中文排序例子

    1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用asort排序不行.用gbk和gb2312可以.这跟几种格式的编码有关系.gbk和gb2312本身的编码就是用拼音排序的. 代 ...

随机推荐

  1. DataUml Design 教程6-DataUML Design 1.1版本号正式公布(支持PD数据模型)

    从DataUML Design正式公布到如今有两个月了.因为近期比較忙,到如今才公布1.1版本号. 以后本人会一直坚持不断完好DataUML Design软件,希望广大程序员们多多支持. 一.1.1版 ...

  2. javascript DOM,它到底是什么-------Day32

    这一晚上看的我是头疼不已啊,为什么呢? 终究是半路出家,我对javascript的理解仅仅停留在:调用javascript,改变页面样式,元素和实现一些事件的响应,尽管须要的时候可能会用,可是到底使用 ...

  3. openvswitch常用操作

    原理讲解: 当我们创建一个交换机(网桥)之后即(ovs-vsctl add-br brname),此时网络功能不受影响,但是会产生一个虚拟网卡,名字为brname(与网桥名字同名,可以使用 ifcon ...

  4. EF简介

    EF:EF是 asp.net的一套ORM框架. ORM: 广义上:ORM指的是面向对象的模型和关系型数据库的数据库之间的相互转换; 狭义上:ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟 ...

  5. 性能优化工具---top

    作用: 实时显示linux下各个进程的资源占用情况 参数: -d :后面可以接秒数,就是整个程序画面更新的秒数.预设是 5 秒: -p :指定某些个 PID 来进行观察监测而已. -b :以批次的方式 ...

  6. String字符串需要掌握的几个问题

    一.两种定义方式的区别: String str = "hello";      先在堆内存中查找是否已经有"hello",若有,将str指向已存在的它即可:若堆 ...

  7. 使用反射类、Class类获取指定的构造器并实例化对象

    package com.test; public class Car { private String brand; private String color; private int maxSpee ...

  8. table操作:边框-斑马线-多表头-焦点高亮-自动求和

    一.操作table,本例子实现的功能: 1.table等宽边框2.table斑马线3.实现table多表头4.焦点所在行高亮5.自动计算总分 二.效果图 三.代码: <!DOCTYPE html ...

  9. 如何创建一个简单的struts2程序

    如何创建一个简单的Struts2程序 “计应134(实验班) 凌豪” 1.创建一个新的Web项目test(File->new->Web Project) 2.Struts2框架的核心配置文 ...

  10. NAND FLASH ECC校验原理与实现

    ECC简介 由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠,因此,在NAND的生产中及使用过程中会产生坏块.为了检测数据的可靠性,在应用NAND  ...