根据值嵌套 NSDictionary

Nesting NSDictionary based on value

我从图书馆得到的数据是 return 这个:

    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 return 基于 '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 底部给出的示例的内容,那将是一个数组数组,其中第一个数组按日期索引,内部数组数组没有特定顺序。

如果您想保留初始字典数据结构,只需将该数组中包含的值设为字典即可。

编辑:这是我要使用的代码

//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];
}