如何从Swift中的数组中获取最新日期

Nik*_*nov 3 nsdate ios swift

我有一系列日期.我需要找到最新的一个.有人能告诉我一个例子吗?

Air*_*ity 14

你可以NSDate遵循Comparable,如图所示这里

鉴于此,您可以使用它maxElement来查找最大值(即最新值).

import Foundation

extension NSDate: Comparable { }

public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.isEqualToDate(rhs)
}

public func <(lhs: NSDate, rhs: NSDate) -> Bool {
    return lhs.compare(rhs) == .OrderedAscending
}

let dates = [NSDate(), NSDate()]

let maxDate = maxElement(dates)
Run Code Online (Sandbox Code Playgroud)

请注意,maxElements对于空数组来说很棒,所以你可能希望用以下方法来保护它isEmpty:

let maxDate = dates.isEmpty ? nil : Optional(maxElement(dates))
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想进入延伸路线:

if let fst = dates.first {
    let maxDate = dropFirst(dates).reduce(fst) {
        $0.laterDate($1)
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,返回一个可选的:

let maxDate = dates.reduce(nil) {
  (lhs: NSDate?, rhs: NSDate?)->NSDate? in
    lhs.flatMap({rhs?.laterDate($0)}) ?? rhs
}
Run Code Online (Sandbox Code Playgroud)

  • 一个糟糕的问题的一个很好的答案. (5认同)

Hai*_*Hai 5

您可以使用reduce

guard let dates = dates, !dates.isEmpty else { return nil }
dates.reduce(Date.distantPast) { $0 > $1 ? $0 : $1 }
Run Code Online (Sandbox Code Playgroud)

编辑:处理空或 nil 数组