NSArray+Chinese.h 文件
@interface NSArray (Chinese)
- (NSArray *)xl_sortedWithChineseKey:(NSString *)chineseKey;
@end
NSArray+Chinese.m 文件
@implementation NSArray (Chinese)
- (NSArray *)xl_sortedWithChineseKey:(NSString *)chineseKey {
NSMutableArray *tmpArray = [NSMutableArray arrayWithCapacity:self.count];
for (int i = 0; i < self.count; ++i) {
NSString *chineseString = (chineseKey == nil) ? self[i] : [self[i] valueForKeyPath:chineseKey];
[tmpArray addObject:@{@"obj": self[i], @"pinyin": chineseString.pinyinString.lowercaseString}];
}
[tmpArray sortUsingComparator:^NSComparisonResult(NSDictionary *obj1, NSDictionary *obj2) {
return [obj1[@"pinyin"] compare:obj2[@"pinyin"]];
}];
return [tmpArray valueForKey:@"obj"];;
}
NSString+Chinese.h 实现
@interface NSString (Chinese)
@property (nonatomic, copy, readonly) NSString *pinyinString;
@end
NSString+Chinese.m 实现
@implementation NSString (Chinese)
- (NSString *)xl_pinyinString {
NSAssert([self isKindOfClass:[NSString class]], @"必须是字符串");
if (self == nil) {
return nil;
}
NSMutableString *pinyin = [self mutableCopy];
CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformMandarinLatin, NO);
CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformStripDiacritics, NO);
return pinyin;
}
@end