基于值嵌套NSDictionary
我从库中的数据返回这个:
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:distanceNumber,@"distance",idChallengerN,@"idChallenger",dateFrom, @"date", nil]; [_array addObject:dict];
如果我打印_array这是有结果:
{ date = "2015-07-31 14:50:40 +0000"; distance = "-1"; idChallenger = 43; }, { date = "2015-07-31 16:18:57 +0000"; distance = "-1"; idChallenger = "-1"; }, { date = "2015-07-31 16:19:05 +0000"; distance = "-1"; idChallenger = "-1"; },
没关系,现在我应该得到每个date
并根据星期这个_array
…
我试过了:
NSMutableDictionary *tempDic = [NSMutableDictionary dictionary]; for (int i = 0; i<_array.count; i++) { NSDictionary *dict = [_array objectAtIndex:i]; NSDate *date = [dict objectForKey:@"date"]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *dateComponents = [calendar components:NSWeekOfYearCalendarUnit fromDate:date]; NSLog(@"date week = %ld",(long)[dateComponents weekOfYear]); NSNumber *weekN = [NSNumber numberWithInteger:[dateComponents weekOfYear]]; if ([tempDic objectForKey:weekN]) { //contains } else{ //not contains }
weekN根据'date'返回一周中的数字,
现在我坚持如果有相同的周数,如何分组某些数据,例如:
weekN = 31 { { idChallenger = 43; idChallenger = 22; } } weekN = 32 { { idChallenger = 55; idChallenger = 21; idChallenger = 678; } }
感谢popctrl:
NSMutableArray *weekArray = [NSMutableArray array]; for(int i = 0; i < 52; i++){ [weekArray addObject:[NSMutableArray array]]; } //This replaces your for loop for (int i = 0; i<_array.count; i++) { NSDictionary *dict = [_array objectAtIndex:i]; NSDate *date = [dict objectForKey:@"date"]; NSCalendar *calendar = [NSCalendar currentCalendar]; //Notice that I changed NSWeekOfYearCalendarUnit to NSCalendarUnitWeekOfYear, as NSWeekOfYearCalendarUnit has been deprecated NSDateComponents *dateComponents = [calendar components:NSCalendarUnitWeekOfYear fromDate:date]; NSMutableArray *innerArray = weekArray[[dateComponents weekOfYear] - 1]; [innerArray addObject:dict]; }
这个代码产生的结构非常好,但如果我想在一年之前分几个星期呢?
如果你正在寻找一些你在post底部给出的例子,那么这将是一个数组数组,其中第一个数组是按date进行索引的,而内部数组没有特定的顺序。
如果您想要保留初始字典数据结构,只需将该数组数组中的值作为字典。
编辑:这是我将使用的代码
//To initialize the array NSMutableArray *weekArray = [NSMutableArray array]; for(int i = 0; i < 52; i++){ [weekArray addObject:[NSMutableArray array]]; } //This replaces your for loop for (int i = 0; i<_array.count; i++) { NSDictionary *dict = [_array objectAtIndex:i]; NSDate *date = [dict objectForKey:@"date"]; NSCalendar *calendar = [NSCalendar currentCalendar]; //Notice that I changed NSWeekOfYearCalendarUnit to NSCalendarUnitWeekOfYear, as NSWeekOfYearCalendarUnit has been deprecated NSDateComponents *dateComponents = [calendar components:NSCalendarUnitWeekOfYear fromDate:date]; NSMutableArray *innerArray = weekArray[[dateComponents weekOfYear] - 1]; [innerArray addObject:dict]; }