當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift Dictionary.Keys sorted(by:)用法及代碼示例


實例方法

sorted(by:)

返回序列的元素,使用給定謂詞作為元素之間的比較進行排序。

聲明

func sorted(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> [Self.Element]

返回值

序列元素的排序數組。

參數

areInIncreasingOrder

如果其第一個參數應在其第二個參數之前排序,則返回 true 的謂詞;否則,false

詳述

如果要對不符合 Comparable 協議的元素序列進行排序,請將謂詞傳遞給此方法,當第一個元素應在第二個元素之前排序時返回 true。結果數組的元素根據給定的謂詞排序。

在以下示例中,謂詞為自定義 HTTPResponse 類型的數組提供排序。謂詞在成功之前對錯誤進行排序,並按錯誤代碼對錯誤響應進行排序。


enum HTTPResponse {
    case ok
    case error(Int)
}


let responses: [HTTPResponse] = [.error(500), .ok, .ok, .error(404), .error(403)]
let sortedResponses = responses.sorted {
    switch ($0, $1) {
    // Order errors by code
    case let (.error(aCode), .error(bCode)):
        return aCode < bCode


    // All successes are equivalent, so none is before any other
    case (.ok, .ok): return false


    // Order errors before successes
    case (.error, .ok): return true
    case (.ok, .error): return false
    }
}
print(sortedResponses)
// Prints "[.error(403), .error(404), .error(500), .ok, .ok]"

您還可以使用此方法按降序對符合 Comparable 協議的元素進行排序。要按降序對序列進行排序,請將大於運算符 (>) 作為 areInIncreasingOrder 參數傳遞。


let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let descendingStudents = students.sorted(by: >)
print(descendingStudents)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"

調用相關的sorted() 方法相當於調用此方法並傳遞小於運算符(<)作為謂詞。


print(students.sorted())
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
print(students.sorted(by: <))
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"

謂詞必須是元素上的strict weak ordering。也就是說,對於任何元素 abc ,必須滿足以下條件:

  • areInIncreasingOrder(a, a) 始終是 false 。 (非反身性)

  • 如果 areInIncreasingOrder(a, b)areInIncreasingOrder(b, c) 都是 true ,那麽 areInIncreasingOrder(a, c) 也是 true 。 (傳遞可比性)

  • 如果根據謂詞,兩個元素都沒有排在另一個之前,則兩個元素是incomparable。如果ab不可比,bc不可比,那麽ac也是不可比的。 (傳遞不可比性)

排序算法不能保證穩定。穩定排序保留areInIncreasingOrder 未建立順序的元素的相對順序。

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Dictionary.Keys sorted(by:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。