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
。也就是说,对于任何元素 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 FlattenSequence sorted()用法及代码示例
- Swift FlattenSequence split(separator:maxSplits:omittingEmptySubsequences:)用法及代码示例
- Swift FlattenSequence suffix(from:)用法及代码示例
- Swift FlattenSequence shuffled()用法及代码示例
- Swift FlattenSequence split(maxSplits:omittingEmptySubsequences:whereSeparator:)用法及代码示例
- Swift FlattenSequence shuffled(using:)用法及代码示例
- Swift FlattenSequence starts(with:)用法及代码示例
- Swift FlattenSequence subscript(_:)用法及代码示例
- Swift FlattenSequence suffix(_:)用法及代码示例
- Swift FlattenSequence prefix(_:)用法及代码示例
- Swift FlattenSequence max(by:)用法及代码示例
- Swift FlattenSequence forEach(_:)用法及代码示例
- Swift FlattenSequence dropLast(_:)用法及代码示例
- Swift FlattenSequence filter(_:)用法及代码示例
- Swift FlattenSequence first(where:)用法及代码示例
- Swift FlattenSequence drop(while:)用法及代码示例
- Swift FlattenSequence reduce(into:_:)用法及代码示例
- Swift FlattenSequence dropFirst(_:)用法及代码示例
- Swift FlattenSequence joined()用法及代码示例
- Swift FlattenSequence randomElement(using:)用法及代码示例
- Swift FlattenSequence randomElement()用法及代码示例
- Swift FlattenSequence last(where:)用法及代码示例
- Swift FlattenSequence lastIndex(of:)用法及代码示例
- Swift FlattenSequence allSatisfy(_:)用法及代码示例
- Swift FlattenSequence first用法及代码示例
注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 FlattenSequence sorted(by:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。