【发布时间】:2014-04-03 15:44:18
【问题描述】:
我有一个对象数组,每个对象都有一个名为“date”的NSDate 属性。
如何找到与当前时间最接近的对象?
【问题讨论】:
-
找出
[myObject.date timeIntervalSinceNow]的绝对值最小的那个。
标签: ios cocoa-touch nsarray nsdate
我有一个对象数组,每个对象都有一个名为“date”的NSDate 属性。
如何找到与当前时间最接近的对象?
【问题讨论】:
[myObject.date timeIntervalSinceNow]的绝对值最小的那个。
标签: ios cocoa-touch nsarray nsdate
这将使最接近的对象与日期最近的对象保持一致。如果您不想要过去的日期,请摆脱 ABS 并确保间隔为正。
MyObjectType *closestObject;
NSTimeInterval closestInterval = DBL_MAX;
for (MyObjectType *myObject in array) {
NSTimeInterval interval = ABS([myObject.date timeIntervalSinceDate:[NSDate date]]);
if (interval < closestInterval) {
closestInterval = interval;
closestObject = myObject;
}
}
【讨论】:
- (NSDate *)closestDateFromArray:(NSArray *)dateArray
{
double smallestDifference = DBL_MAX; // thanks bgfriend0
NSDate *closestDate = nil;
for (NSDate *date in dateArray) {
// suggested by Henri Normak
if ([date timeIntervalSinceNow] <= someThresholdValue) {
return date;
// you could set some value that is a "good enough" value.
// i.e. if the date IS NOW then nothing is going to be closer.
}
if (ABS([date timeIntervalSinceNow]) < smallestDifference) {
smallestDifference = ABS([date timeIntervalSinceNow]);
closestDate = date;
}
}
return closestDate;
}
这样的事情应该可以解决问题。
如果数组是具有日期属性的对象数组,那么您可以执行完全相同的操作,只需从对象中获取日期进行比较。
【讨论】: