Я работаю над приложением телегида и пытаюсь получить ближайшие 3 даты из NSArray с помощью NSDictionary. Пока все хорошо, но я пытался выяснить, как я могу сделать это наилучшим образом, используя как можно меньше памяти и кода (следовательно, уменьшая вероятность ошибок или сбоев). Массив уже отсортирован.
У меня словарь со всеми каналами показывает за один день. Словарь не содержит NSDate (называется дата).
Допустим, на канале 8 передач, и сейчас время 11:45. шоу №3 началось в 11:00 и закончилось в 12:00, шоу №4 началось в 12:00 и закончилось в 13:00, шоу №5 с 13:00 до 14:00 и т. д.
Как я мог fetch show #3 (которое началось в прошлом!), #4 и #5 самые быстрые (по памяти) и самые легкие из моего массива словарей?
В настоящее время я выполняю цикл for, извлекающий каждый словарь, а затем сравниваю дату словаря с текущей датой. И вот где я застрял. Или, может быть, у меня просто переутомление мозга.
Мой текущий код (через некоторое время тестирования разных вещей):
- (NSArray*)getCommingProgramsFromDict:(NSArray*)programs amountOfShows:(int)shows
{
int fetched = 0;
NSMutableArray *resultArray = [[NSMutableArray alloc] init];
NSDate *latestDate = [NSDate date];
for (NSDictionary *program in programs)
{
NSDate *startDate = [program objectForKey:@"date"];
NSLog(@"Program: %@", program);
switch ([latestDate compare:startDate]) {
case NSOrderedAscending:
NSLog(@"latestDate is older, meaning the show starts in the future from latestDate");
// do something
break;
case NSOrderedSame:
NSLog(@"latestDate is the same as startDate");
// do something
break;
case NSOrderedDescending:
NSLog(@"latestDate is more recent, meaning show starts in the past");
// do something
break;
}
// Now what?
}
return resultArray;
}
Я пишу это для iOS 5, используя ARC.