【问题标题】:Nested Sorting NSArray嵌套排序 NSArray
【发布时间】:2017-06-15 12:24:07
【问题描述】:

我有这个由 NSDates 组成的 NSArray,我希望以这样一种方式进行排序,即日期是递减的,但时间是递增的。

排序后的数组(转述)如下所示:

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

实现这一目标的最佳方法是什么。

【问题讨论】:

  • 只写一个排序比较,如果日期不同,则按日期排序,如果两个日期相同,则按时间排序。
  • @Paulw11 嗯,是的,我明白了。但我就是不知道该怎么做。

标签: ios sorting nested nsarray


【解决方案1】:

为日期添加扩展名 -

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-06-15 05: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]

我想这就是你想要的?

【讨论】:

  • 好的,谢谢。我需要在 Obj-c 中这样做,但这对我来说很有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2020-11-28
  • 2018-01-16
  • 1970-01-01
相关资源
最近更新 更多