【问题标题】:Sort an array of optional items that holds yet another optional对包含另一个可选项的可选项数组进行排序
【发布时间】:2014-10-04 09:22:08
【问题描述】:

如何对包含可选 NSdate 的可选数组进行排序?

class HistoryItem {
   var dateCompleted: NSDate?
}

let firstListObject = someListOfObject.last
let secondListObject = someOtherListOfObject.last
let thirdListObject = evenSomeOtherListOfObject.last //Last returns 'T?'

var array = [firstListObject , secondListObject, thirdListObject]

如何根据 dateCompleted 对数组进行排序?

【问题讨论】:

    标签: arrays sorting swift


    【解决方案1】:

    您的排序函数可以使用可选链和 nil 的组合 合并运算符:

    sort(&array) {
        (item1, item2) -> Bool in
        let t1 = item1?.dateCompleted ?? NSDate.distantPast() as! NSDate
        let t2 = item2?.dateCompleted ?? NSDate.distantPast() as! NSDate
        return t1.compare(t2) == NSComparisonResult.OrderedAscending
    }
    

    这将对dateCompleted 值上的项目以及所有符合 是nil 并且带有dateCompleted == nil 的项目被视为“在遥远的过去” 以便在所有其他项目之前订购它们。


    Swift 3 的更新(假设 dateCompletedDate):

    array.sort { (item1, item2) -> Bool in
        let t1 = item1?.dateCompleted ?? Date.distantPast
        let t2 = item2?.dateCompleted ?? Date.distantPast
        return t1 < t2
    }
    

    【讨论】:

    • 就可以了。谢谢!
    【解决方案2】:

    Swift 4.如果你想在最后保留可选值,例如,使用 Int.max:

    self.values.sort { (item1, item2) -> Bool in
        let value1 = item1.seconds ?? Int.max
        let value2 = item2.seconds ?? Int.max
        return value1 < value2
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2020-08-01
      • 1970-01-01
      相关资源
      最近更新 更多