Swift 使用lexicographicallyprecedes 多個引數排序

ZY_FlyWay發表於2019-04-10

有時候我們需要用兩個或者三個引數進行,排序比較。

lexicographicallyprecedes函式介紹


lexicographicallyprecedes可以看下蘋果官方文件的介紹。

這裡簡單說一下:

func lexicographicallyPrecedes<OtherSequence>(_ other: OtherSequence) -> Bool where OtherSequence : Sequence, Self.Element == OtherSequence.Element

返回一個布林值,該值使用小於操作符(<)比較元素,指示該序列是否在詞典(字典)排序中的另一個序列之前。

我們看原始碼可以看出,這個函式的功能,是兩個Sequence的比較。具體怎麼比較實現方法,應該和我們手動寫方法挨個比較一樣。

 

多條件排序


然後我們就可以這樣寫多條件排序了,我們把多個屬性做成序列對比即可。

先看下演示效果

在這裡插入圖片描述

Demo程式碼:

struct people{
    var lastName:String?
    var  fristName:String?
}

var persons = [people.init(lastName: "c", fristName: "120"),people.init(lastName: "a", fristName: "BBB"),people.init(lastName: "b", fristName: "110"),people.init(lastName: "a", fristName: "AAA")]

let new = persons.sorted { p0, p1 in
    
    let left = [p0.lastName,p0.fristName]
    let right =  [p1.lastName,p1.fristName]
    return left.lexicographicallyPrecedes(right){
        $0?.localizedCaseInsensitiveCompare($1!) == .orderedAscending
    }
}

相關文章