2017-06-15 3 views
0

Ich habe diese NSArray von NSDates, die ich so sortieren möchte, dass die Daten absteigend sind, aber die Stunden aufsteigend sind.Nested Sortierung NSArray

das sortierte Array würde (paraphrasiert) wie folgt aussehen:

{tomorrowMorning, tomorrowAfternoon, thisMorning, thisAfternoon, yesterdayMorning, yesterdayAfternoon} 

Was ist der beste Ansatz, um dies zu erreichen wäre.

+0

Schreiben Sie einfach einen Sortiervergleich, der nach dem Datum sortiert, wenn die Daten unterschiedlich sind und die zwei Daten gleich sind, sortiert nach der Uhrzeit. – Paulw11

+0

@ Paulw11 Nun, ja, das bekomme ich. Aber ich kann einfach nicht herausfinden, wie das geht. – Sjakelien

+0

versuchen Sie diese https://stackoverflow.com/questions/38168594/sort-objects-in-array-by-date –

Antwort

0

eine Erweiterung hinzufügen Datum -

extension Date { 

    public func dateWithZeroedTimeComponents() -> Date? { 

     let calendar = Calendar.current 

     var components = calendar.dateComponents([.year, .month, .day], from: self) 
     components.hour = 0 
     components.minute = 0 
     components.second = 0 

     return calendar.date(from: components) 
    } 
} 

Dann diese Art Code verwenden -

// example test data 
let dates: [Date] = [Date(timeIntervalSinceNow: -80060), Date(timeIntervalSinceNow: -30), Date(timeIntervalSinceNow: -75000), Date(timeIntervalSinceNow: -30000), Date(timeIntervalSinceNow: -30060)] 

let sortedDates = dates.sorted { (date1, date2) -> Bool in 

    if let date1Zeroed = date1.dateWithZeroedTimeComponents(), let date2Zeroed = date2.dateWithZeroedTimeComponents() { 

     // if same date, order by time ascending 
     if date1Zeroed.compare(date2Zeroed) == .orderedSame { 
      return date1.compare(date2) == .orderedAscending 
     } 
     // otherwise order by date descending 
     return date1.compare(date2) == .orderedDescending 
    } 

    return true 
} 

print(sortedDates) 

Ergebnis - [2017.06.15 05.20.29 0.000, 2017-06 -15 05:21:29 +0000, 2017-06-15 13:40:59 +0000, 2017-06-14 15:27:09 +0000, 2017-06-14 16:51:29 +0000]

Ich denke, das ist was du willst?

+0

ja, danke. Ich müsste das in Obj-c machen, aber das macht Sinn für mich. – Sjakelien

Verwandte Themen