【问题标题】:Find object in array with closest date to current time [duplicate]在数组中查找与当前时间最接近的对象[重复]
【发布时间】:2014-04-03 15:44:18
【问题描述】:

我有一个对象数组,每个对象都有一个名为“date”的NSDate 属性。

如何找到与当前时间最接近的对象?

【问题讨论】:

  • 找出[myObject.date timeIntervalSinceNow]的绝对值最小的那个。

标签: ios cocoa-touch nsarray nsdate


【解决方案1】:

这将使最接近的对象与日期最近的对象保持一致。如果您不想要过去的日期,请摆脱 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;
        }
    }

【讨论】:

    【解决方案2】:
    - (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;
    }
    

    这样的事情应该可以解决问题。

    如果数组是具有日期属性的对象数组,那么您可以执行完全相同的操作,只需从对象中获取日期进行比较。

    【讨论】:

    • 获得高双倍的更好方法是在 imo 中使用 DBL_MAX
    • 啊,谢谢 :D 认为可能存在但不确定。
    • 可能还值得添加一个特殊条件,如果差异变得非常小则停止,例如,如果差异为 0,则无需继续。这当然是假设如果它们都具有相同的日期,则选择哪个对象并不重要。对于 240 个对象,它可能没有那么大的区别,但它似乎是值得优化的。
    • 投反对票的某些原因?
    • 爱上 Stack Overflow……哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2019-12-16
    • 2022-12-17
    • 1970-01-01
    • 2020-10-02
    相关资源
    最近更新 更多