2015-08-04 5 views
1

я уже данные из библиотеки, которые возвращают это:Верстка 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 возвращает номер недели в году на основе «даты»,

теперь я застрял на том, как группа определенных данных, если имеют одинаковое количество недели, как это, например:

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

этот код производят очень хорошо структуру, но если я хочу разделить недели в год до этого?

ответ

2

Если вы ищете что-то, что следует за примером, который вы указали в нижней части сообщения, это будет массив массивов, где первый массив индексируется по дате, а внутренние массивы не имеют определенного порядка ,

Если вы хотите сохранить исходную структуру данных словаря, просто введите значения, содержащиеся в этом массиве массивов, словарь.

EDIT: Вот код, который я хотел бы использовать

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

спасибо за ваш ответ, вы можете предоставить мне пример? Я не понимаю, как создать структуру, как в моем примере .. – Ilario

+0

Я отредактировал свой ответ !!! – Ilario

+0

Хорошо, это было отредактировано. – popctrl