iOS Developer

iOS-中文排序

2017-06-05  本文已影响44人  linbj

中文排序想想就心累,之前尝试过很多方法也用过某些框架,但是效果并不好。

偶然看到一个方法

//根据系统语言判断两个string的顺序并返回NSComparisonResult值表明词汇排序
- (NSComparisonResult)localizedCompare:(NSString *)string;
037DF378-1B29-41F5-990E-949DAA097E6A.png
NSArray *arr = @[@"重要",@"重点",@"重复",@"凑傻逼", @"凑傻", @"凑合", @"瞅啥", @"上海薛之谦", @"霞浦李易峰"];
NSArray *arrr = [arr sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    if ([obj1 localizedCompare:obj2] == 1) {
        return NSOrderedDescending;
    } else {
        return NSOrderedAscending;
    }
}];

输出为:

DADDA4E4-2816-4596-A6CC-2EBA4DE66ED6.png
    NSString *hanziText = @"我是中国人";
    if ([hanziText length]) {
        NSMutableString *ms = [[NSMutableString alloc] initWithString:hanziText];
        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {
            NSLog(@"pinyin: %@", ms);
        }
        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {
            NSLog(@"pinyin: %@", ms);  
        }  
    }

0E0378D1-B70C-4530-8BB1-D0F1FBD41628.png

不同拼写之间转写
除了英语这个重大例外(和它那令人愉快的拼写不一致),书写系统一般是将语言音调编码成一致的符号表示。欧洲语言一般使用拉丁字母(外加一些变音符),俄罗斯用西里尔字母,日本用平假名和片假名,泰国、韩国和阿拉伯国家也都有自己的字母。

虽然每种语言都有特殊的音调列表,也许有些其他语言会缺失,所有主要书写系统的交集已经足以让你高效的在不同字母之间转写(不要跟翻译搞混了)。

CFStringTransform 可以在拉丁语和阿拉伯语、西里尔语、希腊语、韩语(韩国)、希伯来语、日语(平假名和片假名)、普通话、泰语之间来回转写。

3E326002-C4E8-4ACB-8B15-62C86E21B56C.png

参考文献
CFString​Transform

上一篇下一篇

猜你喜欢

热点阅读