iOS 通讯录排序

在很多时候需要处理分组信息 和 数据排序 按时间 字母 排序,类似通讯录
如下图这里写图片描述

做这个 我的思路是用字典··

这里按字母ABCD排序
首先把中文转换成拼音, 截取第一个字母 然后插入字典 字母作为key 并根据key对应的value创建为数组,第二次取出字典中所有的key ,判断新的key是否在所有key中,在 找出对应的value插入到数组中, 不在重新创建。一般账单是按时间排序的,大同小异

/**
 *  添加手机联系人分组信息处理
 *
 *  @param mobileContactsModel      手机联系人信息
 *  @param mobileContactsDictionary 存储手机联系人字典
 *
 *  @return 返回处理好的手机联系人字典
 */
+ (NSMutableDictionary *)dataDealWithMobileContactsModel:(MobileContactsModel *)mobileContactsModel mobileContactsDictionary:(NSMutableDictionary *)mobileContactsDictionary
{
    // 获取姓转账拼音 截取第一个首字母
    NSString *keyString = [ChineseToPinyin pinyinFromChiniseString:mobileContactsModel.name];
    if (keyString.length != 0)
    {
        NSString *keyTemp = [keyString substringToIndex:1];

        // 判断 改字符是不是字母  不是把key 设置成#
        // 转换成字符
        char ch = [keyTemp characterAtIndex:0];
        GFBLog(@"tempCH == %d", ch);
        if (!((ch >= 65 && ch <= 106) || (ch >= 97 && ch <= 122)))
        {
            // 非字母
            keyTemp = @"#";

        }
        // 在根据拼音截取第一个字符 判断首字母是否在字典的所有key中, 存在取出改key对应的数组 把该对象存到数组中, 不存在 把这个当做key 创建对应的数组,在存数该数组中
        NSArray *keyAll = [mobileContactsDictionary allKeys];

        if ([keyAll containsObject:keyTemp])
        {
            // 存在
            [[mobileContactsDictionary objectForKey:keyTemp] addObject:mobileContactsModel];
        }
        else
        {
            NSMutableArray *tempArray = [NSMutableArray array];
            [tempArray addObject:mobileContactsModel];
            [mobileContactsDictionary setObject:tempArray forKey:keyTemp];
        }
    }

    return mobileContactsDictionary;
}

下面是排序的通用方法,传入一个数组 排序,就是字典中所有的key

/**
 *  数据排序 按字母安排(ABCD... 最后一个#号)
 *
 *  @param array 需要排序的数组
 *
 *  @return 返回排序好的数组
 */
+ (NSArray *)dataArrayUsingComparator:(NSArray *)array
{

    if ([array containsObject:@"#"]) // 数组中包含#
    {
        NSMutableArray *arrayTemp = [[NSMutableArray alloc] initWithArray:array];
        [arrayTemp removeObject:@"#"];

        NSArray *arrayTemp1 = [[NSArray alloc] initWithArray:arrayTemp];

        NSArray *arrayTemp2 = [arrayTemp1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

            return [obj1 compare:obj2 options:NSNumericSearch];
        }];

        [arrayTemp removeAllObjects];
        [arrayTemp addObjectsFromArray:arrayTemp2];
        [arrayTemp addObject:@"#"];

        NSArray *resultArray = [[NSArray alloc] initWithArray:arrayTemp];
        return resultArray;
    }
    else
    {
        return  [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

            return [obj1 compare:obj2 options:NSNumericSearch];
        }];
    }
}

随手写写 表达的不清楚,慢慢积累····

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

建古

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值