Created
June 14, 2013 00:13
-
-
Save Nub/5778494 to your computer and use it in GitHub Desktop.
Handy tool for sorting/grouping an array of items with dates into various calendar based groupings.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+ (NSArray*)eventsGroupedByDay:(NSArray*)events { | |
return [HistoryManager events:events groupedByDateComponents:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit)]; | |
} | |
+ (NSArray*)eventsGroupedByWeek:(NSArray*)events { | |
return [HistoryManager events:events groupedByDateComponents:(NSWeekCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit)]; | |
} | |
+ (NSArray*)events:(NSArray*)events groupedByDateComponents:(NSUInteger)dateComponents { | |
NSCalendar *gregorian = [[NSCalendar alloc] | |
initWithCalendarIdentifier:NSGregorianCalendar]; | |
NSMutableDictionary *groups = [NSMutableDictionary dictionary]; | |
NSDictionary *currentGroup; | |
NSMutableArray *currentGroupEvents; | |
for (Event* event in events) { | |
NSDateComponents *components = [gregorian components:dateComponents | |
fromDate:event.date]; | |
NSDate *key = [gregorian dateFromComponents:components]; | |
currentGroup = groups[key]; | |
//If day doesn't exist, add new group | |
if (!currentGroup) { | |
currentGroupEvents = [NSMutableArray array]; | |
currentGroup = [@{ @"date":key, | |
@"events":currentGroupEvents} mutableCopy]; | |
[groups setObject:currentGroup forKey:key]; | |
} | |
else { | |
currentGroupEvents = currentGroup[@"events"]; | |
} | |
//Add object to group | |
[currentGroupEvents addObject:event]; | |
} | |
NSArray *sortedKeys = [[NSArray arrayWithArray:[groups allKeys]] sortedArrayUsingSelector:@selector(compare:)]; | |
NSMutableArray *groupsArray = [NSMutableArray array]; | |
for (NSDate* groupKey in sortedKeys) { | |
[groupsArray addObject:groups[groupKey]]; | |
} | |
return groupsArray; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment