当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift FlattenSequence.Iterator 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大神的英文原创作品 FlattenSequence.Iterator sorted(by:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。