如何通过数组对象的NSDate日期将NSArray拆分为NSDictionary?

时间:2010-11-21 15:21:02

标签: objective-c sorting nsarray nsdictionary

我有一个NSArray,我按其对象的“已发布”属性按降序排序,最新的第一个:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"published" ascending:YES];
NSArray *descps = [[NSArray alloc] initWithObjects:[sortDescriptor reversedSortDescriptor], nil];
[storiesLocal sortUsingDescriptors:descps];
[descps release];
[sortDescriptor release];

所以现在,我希望每天将这个数组拆开,以便我可以将它与UITableView一起使用。在我的示例中,每个日期都是tableview部分标题。 因此,如果我的示例排序数组(storiesLocal)有这样的日期:

2010-04-05 10:32:00
2010-04-05 06:20:12
2010-04-02 09:23:02
2010-04-02 03:20:34
2010-04-01 04:22:34

然后我会有像4月5日,“4月2日”,“4月1日”这样的tableview标题。因此,每个对应的标题下都有2行,2行和1行

基本上,我想要的结果是NSDictionary。它的每个键都是一个日期(2010-04-02),每个值都是NSArray的正确对象。所有这些都应按日期排序。最新的。

我经历了大约3次尝试并且每次都失败了,最终删除了我写的代码。

编辑:因为NSDictionary是一个无序列表,所以最好有一个字典数组,每个字典包括日期键和故事数组的键,因为顺序非常重要。

1 个答案:

答案 0 :(得分:0)

这未经过测试,但尝试类似:

NSArray *descps as above.

NSDateFormatter *in_formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
NSDateFormatter *out_formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM d"];

NSString *todayStr =
[formatter release];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];

for (ObjectType *obj in descps) {
  NSDate *date = [in_formatter dateFromString:[obj published]];
  NSString *day = [out_formatter stringFromDate:date];

  NSArray *array = [dict valueForKey:day];
  if (array == nil) {
    array = [[NSMutableArray alloc] init];
    [dict setValue:array forKey:day];
    [array release];
  }

  [array addObject:obj];
}

[in_formatter release];
[out_formatter release];