排序中文数组 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