2017-06-15 15 views
0

NSDatesのこのNSArrayがあります。このようにソートすると、日付は降順ですが、時間は昇順です。これを実現するための最良の方法だろう何ネストされたソートNSArray

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

ソートされた配列は、(言い換え)のようになります。

+0

日付が異なる場合に日付を並べ替える並べ替え比較を作成するだけで、2つの日付が同じ場合は時間を並べ替えることができます。 – Paulw11

+0

@ Paulw11さて、はい、私はそれを取得します。しかし、私はちょうどそれを行う方法を理解することはできません。 – Sjakelien

+0

これを試してください。https://stackoverflow.com/questions/38168594/sort-objects-in-array-by-date –

答えて

0

日に拡張子を追加 -

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) 
    } 
} 

そして、この種のコードを使用 -

// 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) 

結果 - [2017年6月15日午前5時20分29秒0000、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]

これはあなたが望むものだと思いますか?

+0

はい、ありがとうございます。私はObj-cでそれを行う必要がありますが、これは私には意味があります。 – Sjakelien

関連する問題