排序中文数组 iOS

作者: 桐丘 | 来源:发表于2015-12-29 14:51 被阅读1842次

    冒泡排序方法实现数组排序,数组中元素为中文字符串,方法如下:

    //数组排序
    - (void)sortedArrayWithChineseObject:(NSMutableArray *)mArray {
        for(NSUInteger i = 0; i < mArray.count - 1; i++) {
            for(NSUInteger j = 0; j < mArray.count - i - 1; j++) {
                NSString *pinyinFirst = [NSString lowercaseSpellingWithChineseCharacters:mArray[j]];
                NSString *pinyinSecond = [NSString lowercaseSpellingWithChineseCharacters:mArray[j + 1]];
                //此处为升序排序,若要降序排序,把NSOrderedDescending 换为NSOrderedAscending即可。
                if(NSOrderedDescending == [pinyinFirst compare:pinyinSecond]) {
                    NSString *tempString = mArray[j];
                    mArray[j] = mArray[j + 1];
                    mArray[j + 1] = tempString;
                }
            }
        }
        //测试
    //    NSLog(@"%@", mArray);
    }
    
    //汉字转拼音,NSString的分类
    #import <Foundation/Foundation.h>
    
    @interface NSString (ChineseCharactersToSpelling)
    
    +(NSString *)lowercaseSpellingWithChineseCharacters:(NSString *)chinese;
    
    @end
    
    #import "NSString+ChineseCharactersToSpelling.h"
    
    @implementation NSString (ChineseCharactersToSpelling)
    
    +(NSString *)lowercaseSpellingWithChineseCharacters:(NSString *)chinese {
        //转成了可变字符串
        NSMutableString *str = [NSMutableString stringWithString:chinese];
        //先转换为带声调的拼音
        CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);
        //再转换为不带声调的拼音
        CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);
        //返回小写拼音
        return [str lowercaseString];
    }
    
    @end
    

    参考:
    ios汉字转拼音
    iOS解决NSArray、NSDictionary打印乱码问题

    相关文章

      网友评论

      • 游龙飞雪:这样实现起来简单,可是效率太TM低了……
        桐丘:@游龙飞雪 按照你说的,我试了,排序结果跟预想的不一样,比如
        NSArray *array = @[@"十九大", @"高铁", @"主席", @"人大代表", @"环保"];
        NSArray *sortedArray1 = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
        return [obj2 compare:obj1];
        }];
        NSLog(@"%@", sortedArray1);
        打印结果是(
        "高铁",
        "环保",
        "十九大",
        "人大代表",
        "主席",
        )
        游龙飞雪:@桐丘 不敢当,一起讨论。 这样是比较好的一种方法,就是效率太低。其实使用系统默认的数组排序方法是可以的,不过要把Xcode添加一个本地化简体中文语言。模拟器也设置为中文语言。可以实现中文数组排序。
        桐丘:@游龙飞雪 请指教

      本文标题:排序中文数组 iOS

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