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

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];

        });
    });
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值