iOS-中文排序

作者: linbj | 来源:发表于2017-06-05 15:51 被阅读44次

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

    偶然看到一个方法

    //根据系统语言判断两个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

    相关文章

      网友评论

        本文标题:iOS-中文排序

        本文链接:https://www.haomeiwen.com/subject/xtgifxtx.html