Я передаю NSDate следующей функции и хочу найти NSDate в массиве, который ближе всего по времени к переданному значению.Objective-C Самый быстрый способ найти ближайший NSDate в NSArray
Пожалуйста, обратите внимание, что я не хочу знать, если массив содержит точную дату, как этот пост: Find NSDate in sorted NSArray
Я хочу знать, какую дату в массиве находится ближе во времени к моей базисную дату.
Я должен делать это часто. Следующие работы, но медленные - как я могу ускорить процесс?
// Get the XYZ data nearest to the passed time
- (eciXYZ)eciDataForTime:(NSDate*)time {
// Iterate our list and find the nearest time
float nearestTime = 86400; // Maximum size of dataset (2 days)
int index = 0; // Track the index
int smallestDifferenceIndex = index; // Track the index with the smallest index
NSDate *lastListDate; // Track the closest list date
for (index = 0 ; index < [self.time count]-1 ; index++) {
NSDate *listDate = [self.time objectAtIndex:index]; // Get the date - Time is an NSMutableArray of NSDates
// NSTimeInterval is specified in seconds; it yields sub-millisecond precision over a range of 10,000 years.
NSTimeInterval timeDifferenceBetweenDates = [listDate timeIntervalSinceDate:time];
if (timeDifferenceBetweenDates < nearestTime && timeDifferenceBetweenDates > 0) {
nearestTime = timeDifferenceBetweenDates; // Update the tracker
smallestDifferenceIndex = index; // Update the smallest difference tracker
lastListDate = listDate; // Capture the closest date match
//NSLog(@"Time: %f %@",timeDifferenceBetweenDates,listDate);
}
}
Использование набора работает, если не может быть повторяющихся дат. В противном случае использование массива работает - просто сохраните массив, отсортированный по мере добавления значений. – rmaddy
@rmaddy это правда, но я не думал, что это применимо в этом случае. недостаточно информации, чтобы знать, если это произойдет. Обновленный ответ, чтобы отразить это, спасибо. –
Еще быстрее было бы выполнять двоичный поиск через отсортированный массив, а не последовательный, как в вашем последнем примере. – davecom