对 tableView 数据源中的时间进行分组排序

遇到一个需求, 需要从后台返回的消息或者交易列表中根据日期进行分组排序, 界面类似 根据日期或者消息类型,等等进行排序; 数据格式类似下面这种:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[
{
"date":"2018-12-12",
"titleInfo":"xxxxx",
},
{
"date":"2018-12-12",
"titleInfo":"xxxxx",
},
{
"date":"2018-12-12",
"titleInfo":"xxxxx",
},
{
"date":"2018-12-12",
"titleInfo":"xxxxx",
},
]

可以再获取到数据后对数据先分好组 然后在每一个创建空数组 在遍历数据源中的数据 如果时间和组头一样就加入对应空数组中; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- (void)handleArraysAction {
NSMutableArray *timeArr = [NSMutableArray array];
__weak typeof(self) weakSelf = self;
[self.requestDataArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
QKTimeGroupModel* headModel = obj;
[timeArr addObject:headModel.date_str];
}];
NSSet *set = [NSSet setWithArray:timeArr];//使用asset把timeArr的日期去重
NSArray *userArray = [set allObjects];//去重后的时间数组
//遍历userArray 按照userArray里的时间分成几个组每个组都是空的数组
// self.dataSource = [NSMutableArray array];
[userArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSMutableArray *arr = [NSMutableArray array];
[weakSelf.dataSource addObject:arr];
}];
//遍历self.requestDataArray取其中每个数据的日期看看与userArray里的那个日期匹配就把这个数据装到sectionArray对应的组中
[self.requestDataArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
QKTimeGroupModel* headModel = obj;
for (NSString *timeStr in userArray) {
if ([timeStr isEqualToString:headModel.date_str]) {
NSMutableArray *emptyArr = [weakSelf.dataSource objectAtIndex:[userArray indexOfObject:timeStr]];//取到对应的空数组
[emptyArr addObject:headModel];
}
}
}];
}

也可以额外定义一个时间变量和一个 section 的变量, 循环对比每个 date 的值, 然后根据对比结果决定加入到数组不同的 section 中; 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-(void)testDict{
NSMutableArray *modelArray = [QKTimeGroupModel getData];
NSString *pervDate = @"temp";
NSUInteger sectionNumber = 0;
for (int i = 0; i < modelArray.count; i++) {
QKTimeGroupModel *model = modelArray[i];
if ([model.date_str isEqualToString:pervDate]) {
NSMutableArray *arr = (NSMutableArray *)modelArray[sectionNumber];
[arr addObject:model];
[modelArray replaceObjectAtIndex:sectionNumber withObject:arr];
}else{
pervDate = model.date_str;
NSMutableArray *arr = [NSMutableArray array];
[arr addObject:model];
[modelArray addObject:arr];
sectionNumber = modelArray.count - 1;
}
}
}