中文排序想想就心累,之前尝试过很多方法也用过某些框架,但是效果并不好。
偶然看到一个方法
//根据系统语言判断两个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参考文献
CFStringTransform
网友评论