arrays - 对包含另一个可选项目的可选项目数组进行排序

标签 arrays sorting swift

如何对包含可选 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 对数组进行排序?

最佳答案

您的排序函数可以使用可选链接和 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 值对项目进行排序,以及所有符合该日期的项目 是 nildateCompleted == 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
}

关于arrays - 对包含另一个可选项目的可选项目数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508124/

相关文章:

ios - 如何更改标签栏分隔线?

ios - Google Map iOS - 缩放动画在两部不同手机上的工作方式不同(iPhone X 与 iPhone 7)

arrays - Matlab One Hot Encoding - 将带有分类的列转换为多个逻辑列

c++ - 查找两个数组中的共同元素

java - 如何将字段设置为键并对类进行排序

SWIFT 对具有特定对象的不同对象集合的单元格进行排序

Java:检查数组中的下一个 "field"是否存在

ruby - 如何遍历嵌套数组

python - 如何按整数对元组的混合列表进行排序?

ios - 在 Swift 中使用 Accelerate 框架