NSArray 中的 NSDictionary
Posted
技术标签:
【中文标题】NSArray 中的 NSDictionary【英文标题】:NSDictionary within NSArray 【发布时间】:2011-08-28 22:48:39 【问题描述】:关于 NSArrays 和 NDictionarys 的快速问题。
我有和 NSArray 包含 NSDictionarys。 NSDictionary 包含一个日期和一个字符串。
我想要做的是最终得到一个 NSDictionary,其中包含该日期的键日期和值字符串数组。
最好的方法是什么
【问题讨论】:
【参考方案1】: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
不是“日历日期”,因此具有不同时间的同一天将被视为结果字典中的不同日期。
【讨论】:
我通过使用这个 NSCalendar *cal = [NSCalendar currentCalendar] 确保所有 NSDate 都在 00:00; [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; NSDateComponents *comp = [校准组件:(NSMonthCalendarUnit|NSYearCalendarUnit|NSDayCalendarUnit) fromDate:tempDate]; NSDate *dateToAdd = [cal dateFromComponents:comp]; 应该 [result setObject:stringsWithDate forKey:date];在 if 语句之后,在完美运行之后,谢谢! 实际上它应该与 if 语句中的[result setObject:...]
一起使用。【参考方案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];
【讨论】:
以上是关于NSArray 中的 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章
NSArray 中的 NSObject 的属性是不是会发生变化,或者是不是必须再次将它们添加到 NSArray?
iPhone SDK 中的 NSMutableArray、NSArray、NSString 内存泄漏