iOS开发 服务器请求出来的数据按日期重新分组

Posted 向日葵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发 服务器请求出来的数据按日期重新分组相关的知识,希望对你有一定的参考价值。

在APP开发中经常碰到这种情况,后台给的数据需要我们按照某种条件分组。比如我的项目中:需要把数组中的数据按照时间分类分组,同一天的数据放在一起比如8-20号的数据分一组,8-21号的数据分一组。代码如下:

#import "ViewController.h"
#import "model.h"
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
    NSMutableArray *userModelArr;
    NSMutableArray *tempArray;
    NSMutableArray *_dateArr;
    NSMutableArray *timeArr;
    NSArray  * arrrrrrrrrr;
    
}
@property(nonatomic,strong)UITableView *tableView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   self.title = @"会议";

    _tableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStylePlain];
    _tableView.dataSource = self;
    _tableView.delegate = self;
    
    [self.view addSubview:_tableView];
    
   [self shuju];
    
    

}
-(void)shuju
{
    tempArray = [NSMutableArray array];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURL *url = [NSURL URLWithString:@"http://dev.brc.com.cn:8085/api/meeting/list?access_token=1b5e8731e5ff44928991b3098fe52464&type=32&showrows=10&page=1"];
    // 通过URL初始化task,在block内部可以直接对返回的数据进行处理
    NSURLSessionTask *task =[session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError* error) {
        
        NSDictionary *dic = [NSDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]];
        
        NSLog(@"999%@22",dic);
        
        id jsonArr = dic[@"data"];
        
        NSMutableArray *allTimeArr = [NSMutableArray array];
        for (NSDictionary *ordersDic in jsonArr) {
            
            //1.取出所有出现得时间
            [allTimeArr addObject:[ordersDic[@"starttime"] substringToIndex:10]];
        }
       
    arrrrrrrrrr = [self arrayWithMemberIsOnly:allTimeArr];
        NSLog(@"%@",arrrrrrrrrr);
        
        for (NSString *nowTim in arrrrrrrrrr) {
            
            NSMutableArray *arr = [[NSMutableArray alloc] init];
            for (NSDictionary *ordersDicTwo in jsonArr) {
                
                NSString *twoTim = [ordersDicTwo[@"starttime"] substringToIndex:10];
                if([twoTim isEqualToString:nowTim]){
                    //2.将每个字典保存在模型数组中
                    model *tianjianModel = [[model alloc]init];
                    [tianjianModel setValuesForKeysWithDictionary:ordersDicTwo];
                    [arr addObject:tianjianModel];
                    
                }
                
            }
            
            
            [tempArray addObject:arr];
        }
        
        [_tableView reloadData];
       }];
    
    [task resume];
//    });

}

// 告诉TableView对应的Section要显示几行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    NSArray *arr = tempArray[section];

    return  arr.count;
}

// 告诉TableView要显示什么内容,当Cell显示的时候就会调用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    
    if (cell == nil) {
        
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

    
    NSArray *arr = tempArray[indexPath.section];
    model *cellModel = arr[indexPath.row];
    
    cell.textLabel.text = cellModel.title;
    
    return cell;
}
// 返回分组(Section)数 Section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return tempArray.count;
}
// 返回组头部的Title
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{

    return [NSString stringWithFormat:@"第%ld组", section];
}
// 返回组头部(段头)的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 30;
}

//去除数组中重复的
-(NSArray *)arrayWithMemberIsOnly:(NSArray *)array
{
    NSMutableArray *categoryArray =[[NSMutableArray alloc] init];
    for (unsigned i = 0; i < [array count]; i++) {
        @autoreleasepool {
            if ([categoryArray containsObject:[array objectAtIndex:i]]==NO) {
                [categoryArray addObject:[array objectAtIndex:i]];
            }
        }
    }
    return categoryArray;
}

 

 

 

以上是关于iOS开发 服务器请求出来的数据按日期重新分组的主要内容,如果未能解决你的问题,请参考以下文章

iOS小技能:对象数组按照日期分组和排序,使用块代码实现数组排序和乱序。

iOS 核心数据总和数据按日期、月份年份

使用 JPA 的 Criteria API 按日期间隔分组

核心数据按年份分组并按日期排序

按数据区间分组

mysql 如何按月分组查询出当前年度每个月的短信数量(数据库中这个月要是为空的话就用0条怎么显示出来)