Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 对包含另一个可选项的可选项数组进行排序_Arrays_Sorting_Swift - Fatal编程技术网

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

Arrays 对包含另一个可选项的可选项数组进行排序,arrays,sorting,swift,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 ar

如何对包含可选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
值上的项目以及 是
nil
,并且
dateCompleted==nil
的项目被视为“在遥远的过去” 以便在订购所有其他物品之前订购


更新Swift 3(假设
dateCompleted
Date
):

array.sort{(item1,item2)->Bool-in
设t1=item1?dateCompleted?Date.distantpass
设t2=item2?dateCompleted?Date.distantpass
返回t1
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
}
self.values.sort{(item1,item2)->Bool-in
设值1=item1.seconds±Int.max
让value2=item2.seconds±Int.max
返回值1<值2
}

这样就可以了。谢谢
self.values.sort { (item1, item2) -> Bool in
    let value1 = item1.seconds ?? Int.max
    let value2 = item2.seconds ?? Int.max
    return value1 < value2
}