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

How to get the latest date from array in Swift

我有一组日期。我需要找到最新的。有人可以给我举个例子吗?

可以让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)

请注意,maxElements 对空数组产生影响,因此您可能需要使用 isEmpty:

来保护它
let maxDate = dates.isEmpty ? nil : Optional(maxElement(dates))

或者,如果你不想走延伸路线:

if let fst = dates.first {
    let maxDate = dropFirst(dates).reduce(fst) {
        [=12=].laterDate()
    }
}

或者,对于 return 一个可选的:

let maxDate = dates.reduce(nil) {
  (lhs: NSDate?, rhs: NSDate?)->NSDate? in
    lhs.flatMap({rhs?.laterDate([=13=])}) ?? rhs
}

运行这个在你的游乐场

var dates = [NSDate]()

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
let date1 = dateFormatter.dateFromString("02-06-1987")
let date2 = dateFormatter.dateFromString("02-06-2001")
let date3 = dateFormatter.dateFromString("02-06-2010")

//var date1 = NSDate()
dates.append(date3!)
dates.append(date1!)
dates.append(date2!)


var maxDate = dates[0]
for i in 0...dates.count-1
{
    if(maxDate.compare(dates[i]).rawValue == -1){
        maxDate = dates[i]
        println(maxDate)
    }
    println(maxDate)
}

println(maxDate.description)

祝你有美好的一天:)

你可以利用reduce:

guard let dates = dates, !dates.isEmpty else { return nil }
dates.reduce(Date.distantPast) { [=10=] >  ? [=10=] :  }

编辑:处理空数组或 nil 数组