如何按日期对 NSMutableArray 进行分组
Posted
技术标签:
【中文标题】如何按日期对 NSMutableArray 进行分组【英文标题】:How to group NSMutableArray by Date 【发布时间】:2013-09-15 15:00:40 【问题描述】:我有一个名为 records 的 NSMutableArray,其中包含一些单条记录。所以结构是这样的:
记录 记录(“名称”:“test1”,“时间戳”:“2013-09-15 12:34:35 +0000”) 记录(“名称”:“test2”,“时间戳”:“2013-09-14 11:21:42 +0000”) 记录(“名称”:“test3”,“时间戳”:“2013-09-14 10:47:42 +0000”) 记录(“名称”:“test4”,“时间戳”:“2013-09-12 17:11:42 +0000”) 记录(“名称”:“test5”,“时间戳”:“2013-09-12 19:52:42 +0000”)知道我想在 UITableView 中显示它们。没有部分也可以正常工作:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
[...]
NSManagedObject *record = [self.records objectAtIndex:indexPath.row];
cell.recordNameLabel.text = [record valueForKey:@"name"];
return cell;
但现在我想用时间戳值将记录分开。所以我的想法是创建一个名为 sorted Records 的新 NSMutableArray,结构如下:
记录
日(2013-09-15)
记录(“名称”:“test1”,“时间戳”:“2013-09-15 12:34:35 +0000”)日(2013-09-14)
记录(“名称”:“test2”,“时间戳”:“2013-09-14 11:21:42 +0000”) 记录(“名称”:“test3”,“时间戳”:“2013-09-14 10:47:42 +0000”)日(2013-09-12)
记录(“名称”:“test4”,“时间戳”:“2013-09-12 17:11:42 +0000”) 记录(“名称”:“test5”,“时间戳”:“2013-09-12 19:52:42 +0000”)如何将记录分组/分离到我的排序结构?
感谢您的帮助。
【问题讨论】:
你的时间戳是字符串还是 NSDate 对象? 【参考方案1】:一种可能的解决方案是:
1) 使用一种方法创建 NSDate 类别,例如 day:
@interface NSDate(Day)
- (NSDate*) day;
@end
@implementation NSDate(Day)
- (NSDate*) day
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [[NSCalendar currentCalendar] components:unitFlags fromDate:self];
return [[NSCalendar currentCalendar] dateFromComponents:comps];
@end
2) 使用 NSFetchedResultsController 和 sectionNameKeyPath - @"timestamp.day"
。
【讨论】:
+1,尽管我强烈建议您使用comps.hour = 12;
。这样生成的NSDate
将在中午,而不是午夜。午夜有一些奇怪的事情(不是每天都有午夜),可能会导致微妙的错误结果。
戴夫,你能解释一下哪一天没有午夜吗?我以前从未见过这样的案例。
在巴西,夏令时跳跃发生在午夜,所以在那些日子(当他们失去一个小时),没有午夜。时间直接从晚上 11:59:59 到凌晨 1:00:00。另请参阅this question。【参考方案2】:
如果“Records”是字典对象的 NSMutableArray,字段“timestamp”为 NSDate 类型,则可以使用 NSSortDescriptor
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:FALSE];
[allVideos sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
*它是一个降序数组。 ascending:TRUE
表示数组升序!!!
【讨论】:
以上是关于如何按日期对 NSMutableArray 进行分组的主要内容,如果未能解决你的问题,请参考以下文章
如何按数值对包含 NSDictionary 的 NSMutableArray 进行排序?