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

来源:互联网 发布:win7如何设置网络类型 编辑:程序博客网 时间:2024/05/01 13:10

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];        });    });}
0 0