iOS 通讯录排序

在很多时候需要处理分组信息 和 数据排序 按时间 字母 排序,类似通讯录
如下图iOS 通讯录排序_第1张图片

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

这里按字母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];
        }];
    }
}

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

你可能感兴趣的:(ios,数据,通讯录)