2011-08-28 107 views
1

关于NSArrays和NDictionarys的快速提问。NSArray内的NSDictionary

我有和NSArray包含NSDictionarys。 NSDictionary包含一个日期和一个字符串。

我想要做的就是结束一个NSDictionary,其中包含日期和字符串的键数组。

什么是做到这一点

回答

2
NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
for (NSDictionary *dict in array) { 
    NSDate *date = [dict objectForKey:@"dateKey"]; 
    NSString *string = [dict objectForKey:@"stringKey"]; 
    NSMutableArray *stringsWithDate = [result objectForKey:date]; 
    if (!stringsWithDate) { 
     stringsWithDate = [NSMutableArray array]; 
     [result setObject:stringsWithDate forKey:date]; 
    } 
    [stringsWithDate addObject:string]; 
} 

注意NSDate不是“日历日期”,所以用不同的时间在同一天将被视为在结果字典中的不同日期。

+0

我已经确定所有的NSDate在00:00使用这个NSCalendar * cal = [NSCalendar currentCalendar]; [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; NSDateComponents * comp = [cal组件:(NSMonthCalendarUnit | NSYearCalendarUnit | NSDayCalendarUnit)fromDate:tempDate]; NSDate * dateToAdd = [cal dateFromComponents:comp]; – user913059

+0

should [result setObject:stringsWithDate forKey:date]; 在if语句之后,在完成之后完成,THANKKKS! – user913059

+0

实际上,它应该在if语句内使用'[set setObject:...]'。 – omz

2

由于我没有看到这样做的合理动机的最好方式,我们称之为代码高尔夫球。

NSMutableArray *dates = [NSMutableArray array]; 
NSMutableArray *strings = [NSMutableArray array]; 

for (NSDictionary *dict in dictArray) { 
    [dates addObject:[dict objectForKey:@"date"]]; 
    [strings addObject:[dict objectForKey:@"string"]]; 
} 

NSArray *datesArray = [[NSArray alloc] initWithArray:dates]; 
NSArray *stringsArray = [[NSArray alloc] initWithArray:strings];