中文排序问题

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray* array = @[ @"北京", @"广州", @"上海", @"西安", @"安徽" ];
    NSArray* sortArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSString* obj1, NSString* obj2) {

        CFMutableStringRef string1 = CFStringCreateMutableCopy(NULL, 0,  (__bridge CFStringRef)obj1);

        CFStringTransform(string1, NULL, kCFStringTransformMandarinLatin, NO);
        CFStringTransform(string1, NULL, kCFStringTransformStripDiacritics, NO);

        CFMutableStringRef string2 = CFStringCreateMutableCopy(NULL, 0, (__bridge CFStringRef)obj2);
        CFStringTransform(string2, NULL, kCFStringTransformMandarinLatin, NO);
        CFStringTransform(string2, NULL, kCFStringTransformStripDiacritics, NO);

        NSString *str1 = (__bridge NSString *)string1;
        NSString *str2 = (__bridge NSString *)string2;

        NSComparisonResult  result =  [str1 compare:str2 ];
        CFRelease(string1);
        CFRelease(string2);
        return result;

    }];

    NSLog(@"%@",sortArray);
}
时间: 2024-08-08 13:20:46

中文排序问题的相关文章

字符集utf8中文排序问题

数据库 字符集: utf8 排序规则:utf8_generay_ci 表结构: mysql> desc chr; +------------+---------------+------+-----+---------+-------+ | Field      | Type          | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+-------+ | char_

oracle的中文排序问题

mysql中文排序有convert(name using gbk)这样的函数,于是研究了一下oracle中文排序: 使用拼音排序 SQL> select * from chineseordertest order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M'); NAME ---------------------------------------- A语言 汉文 日文 中文 使用笔画排序 SQL> select * from chineseord

ExtJS4.2学习(四)Grid表格中文排序问题(转)

鸣谢:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-07/173.html ----------------------------------------------------------------------------------------- 如果不进行任何排序的设置,Extjs有默认的排序. 下面的代码没有对Grid进行排序的设置: /** * Grid * 此js对Grid的某列进行了排

java中文排序问题(转)

在Java中,对一个数组或列表(在本文中统称为集合)中的元素排序,是一个很经常的事情.好在Sun公司在Java库中实现了大部分功能.如果集合中的元素实现了Comparable接口,调用以下的静态(static)方法,就可以直接对集合排序. // 数组排序方法// 数组中的元素可以是像int这样的原生类型(primitive type), 也可以是像String这样实现了Comparable接口的类型,这里用type表示. java.util.Arrays.sort(type[] a); // 列

面向对象,集合篇(2)

一.集合排序(方法一) 概念: java.lang.Comparable接口适用于一个类有自然顺序的时候.假定对象集合是同一类型,该接口允许把集合排序成自然顺序.该接口中的int compareTo( T obj )方法: 比较当前实例对象与对象obj,如果位于对象obj之前,返回负值:如果两个对象在排序中位置相同,则返回0:如果位于对象obj后面,则返回正值. 实现要点:让被放置到容器的对象类实现Comparable接口.由其中所实现的方法compareTo( )决定对象之间的排列顺序. 注意

java之 ------ 集合【详解】

集合 一.集合的概念 个人理解:说简单点就类似如,但又远厉害于数组.数组只能定长.类型单一,而集合则是在数组上面的扩充,放大.集合可以同时放多个类型对象,也就是人们说的元素,且数量可变的. 书面解释:集合是包含多个对象的简单对象,所包含的对象称为元素.集合里面可以包含任意多个对象,数量可以变化:同时对对象的类型也没有限制,也就是说集合里面的所有对象的类型可以相同,也可以不 同.集合:数量不限.类型不限:数组:定长.类型单一. 二.数据存储结构分类 主要就是看存储的方式,像数组就是顺序存储,而集合

Java之------集合

集合 一.集合的概念 书面解释:集合是包含多个对象的简单对象,所包含的对象称为元素.集合里面可以包含任意多个对象,数量可以变化:同时对对象的类型也没有限制,也就是说集合里面的所有对象的类型可以相同,也可以不同.集合:数量不限.类型不限:数组:定长.类型单一. 个人理解:集合是数组的一种扩展,集合里面可以存放多种数据类型和对象,同时集合可自由扩充,也就是自由添加元素,而数组不能,这一点就远比数组强大.还可以借助数学中的集合来理解集合,集合中的元素不能重复. 二.数据存储结构分类 数组是顺序存储方式

NLP+语篇分析(五)︱中文语篇分析研究现状(CIPS2016)

摘录自:CIPS2016 中文信息处理报告<第三章 语篇分析研究进展.现状及趋势>P21 CIPS2016 中文信息处理报告下载链接:http://cips-upload.bj.bcebos.com/cips2016.pdf NLP词法.句法.语义.语篇综合系列: NLP+词法系列(一)︱中文分词技术小结.几大分词引擎的介绍与比较 NLP+词法系列(二)︱中文分词技术及词性标注研究现状(CIPS2016) NLP+句法结构(三)︱中文句法结构研究现状(CIPS2016) NLP+语义分析(四)

ExtJS 6.2.0 增加中文排序支持

网上现有的仅包含旧版的扩展方式,总结核心实现为将默认的字符串比较方式重写为使用JavaScript的localeCompare方法进行字符串顺序比较. 最近项目中使用的为ExtJS 6.2.0,旧版的重写applySort的方式无法使用,于是自行跟踪源码,找出了针对新版的中文排序实现方式. 核心原理为重写Ext.util.Sorter类的sortFn,当比较值为字符串时使用localeCompare进行比较并直接返回值,localeCompare的可能返回值为-1.0.1. 详见如下代码: /*