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?

NSArray 中的 NSDictionary

通过取消引用更改 NSArray 中的值?

iPhone SDK 中的 NSMutableArray、NSArray、NSString 内存泄漏

predicateWithFormat:argumentArray: 使用 NSArray 中的所有项目

如何将 NSArray 中的对象添加到 NSMutableArray 的末尾?