基于值嵌套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]; }