您的位置:首页 > 移动开发 > IOS开发

iOS 开发系列之 字符串(汉字,日期)的比较排序

2015-07-01 20:28 453 查看
2015-7-1日

在项目中当用户点击时需要对汉字和日期进行排序,是从服务器获取下来的数据,外层是数组包含字典,需要对字典里边的值进行排序。具体实现代码如下

在对汉字排序的时候也有采取取出汉字的首字母,将汉字转变为拼音,然后取出首字母,代码如下:

- (NSString *)firstCharactor:(NSString *)aString
{
//转成了可变字符串
NSMutableString *str = [NSMutableString stringWithString:aString];
//先转换为带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
//再转换为不带声调的拼音
CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
//转化为大写拼音
NSString *pinYin = [str capitalizedString];
//获取并返回首字母
return [pinYin substringToIndex:1];
}


/**
* @method 排序(汉语拼音排序)
* @params order 依照对象的哪个特性进行排序 传入需要排序key string name
* @reult  void
*/
- (void)sortByOrder:(NSComparisonResult )order withName:(NSString *)name {
/*降序和升序的话,就让无值或者乱值的当前数据处于最后(就是最小 defaultMinString)
*/
NSString *defaultMinString = @"a";
NSString *defaultMaxString = @"z";
switch (order) {
case NSOrderedAscending:  //升序a<b``
[self sortByString:NSOrderedAscending withDefaultName:defaultMinString andString:name];
break;
case NSOrderedDescending:  //降序a>b

[self sortByString:NSOrderedDescending withDefaultName:defaultMaxString andString:name];
break;

default:
break;
}

}

- (void)sortByString:(NSComparisonResult )order withDefaultName:(NSString *)defaultName andString:(NSString *)nameString {

dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(globalQueue, ^{

[tableListArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {

NSString *string1;
if ([[obj1 valueForKey:nameString] isEqual:[NSNull null]]) {

string1 = defaultName;

}else {

string1 = [obj1 valueForKey:nameString];

}
NSString *string2;
if ([[obj2 valueForKey:nameString] isEqual:[NSNull null]]) {

string2 = defaultName;
}else {

string2 = [obj2 valueForKey:nameString];

}
NSComparisonResult result = [string1 localizedCompare:string2];
return result == order;
}];

dispatch_async(dispatch_get_main_queue(), ^{

[self.tableView reloadData];

});
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: