sort(by:)
声明
mutating func sort(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows
Self
符合 RandomAccessCollection
时可用。参数
areInIncreasingOrder
如果其第一个参数应在其第二个参数之前排序,则返回
true
的谓词;否则,false
。如果areInIncreasingOrder
在排序过程中抛出错误,则元素的顺序可能不同,但不会丢失。
详述
当您想要对不符合 Comparable
协议的元素集合进行排序时,将一个闭包传递给此方法,当第一个元素应在第二个元素之前排序时返回 true
。
在以下示例中,闭包为说明 HTTP 响应的自定义枚举数组提供了排序。谓词在成功之前对错误进行排序,并按错误代码对错误响应进行排序。
enum HTTPResponse {
case ok
case error(Int)
}
var responses: [HTTPResponse] = [.error(500), .ok, .ok, .error(404), .error(403)]
responses.sort {
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(responses)
// Prints "[.error(403), .error(404), .error(500), .ok, .ok]"
或者,当您希望排序为降序而不是升序时,使用此方法对符合Comparable
的元素集合进行排序。将大于运算符 (>
) 运算符作为谓词传递。
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort(by: >)
print(students)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"
areInIncreasingOrder
必须是元素上的 strict weak ordering
。也就是说,对于任何元素 a
、 b
和 c
,必须满足以下条件:
-
areInIncreasingOrder(a, a)
始终是false
。 (非反身性) -
如果
areInIncreasingOrder(a, b)
和areInIncreasingOrder(b, c)
都是true
,那么areInIncreasingOrder(a, c)
也是true
。 (传递可比性) -
如果根据谓词,两个元素都没有排在另一个之前,则两个元素是
incomparable
。如果a
和b
不可比,b
和c
不可比,那么a
和c
也是不可比的。 (传递不可比性)
排序算法不能保证稳定。稳定排序保留areInIncreasingOrder
未建立顺序的元素的相对顺序。
可用版本
相关用法
- Swift Slice sort()用法及代码示例
- Swift Slice sorted()用法及代码示例
- Swift Slice sorted(by:)用法及代码示例
- Swift Slice suffix(_:)用法及代码示例
- Swift Slice starts(with:)用法及代码示例
- Swift Slice split(separator:maxSplits:omittingEmptySubsequences:)用法及代码示例
- Swift Slice shuffle(using:)用法及代码示例
- Swift Slice shuffle()用法及代码示例
- Swift Slice subscript(_:)用法及代码示例
- Swift Slice suffix(from:)用法及代码示例
- Swift Slice shuffled()用法及代码示例
- Swift Slice shuffled(using:)用法及代码示例
- Swift Slice split(maxSplits:omittingEmptySubsequences:whereSeparator:)用法及代码示例
- Swift Slice endIndex用法及代码示例
- Swift Slice reduce(into:_:)用法及代码示例
- Swift Slice contains(_:)用法及代码示例
- Swift Slice removeAll(where:)用法及代码示例
- Swift Slice +(_:_:)用法及代码示例
- Swift Slice lastIndex(where:)用法及代码示例
- Swift Slice removeFirst()用法及代码示例
- Swift Slice reduce(_:_:)用法及代码示例
- Swift Slice insert(_:at:)用法及代码示例
- Swift Slice isEmpty用法及代码示例
- Swift Slice dropLast(_:)用法及代码示例
- Swift Slice partition(by:)用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Slice sort(by:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。