在很多时候需要处理分组信息 和 数据排序 按时间 字母 排序,类似通讯录
如下图
做这个 我的思路是用字典··
这里按字母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];
}];
}
}
随手写写 表达的不清楚,慢慢积累····