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 Sequence sorted()用法及代碼示例
- Swift Sequence shuffled(using:)用法及代碼示例
- Swift Sequence split(separator:maxSplits:omittingEmptySubsequences:)用法及代碼示例
- Swift Sequence suffix(_:)用法及代碼示例
- Swift Sequence shuffled()用法及代碼示例
- Swift Sequence split(maxSplits:omittingEmptySubsequences:whereSeparator:)用法及代碼示例
- Swift Sequence starts(with:)用法及代碼示例
- Swift Sequence prefix(_:)用法及代碼示例
- Swift Sequence prefix(while:)用法及代碼示例
- Swift Sequence allSatisfy(_:)用法及代碼示例
- Swift Sequence reduce(_:_:)用法及代碼示例
- Swift Sequence min()用法及代碼示例
- Swift Sequence reduce(into:_:)用法及代碼示例
- Swift Sequence filter(_:)用法及代碼示例
- Swift Sequence contains(_:)用法及代碼示例
- Swift Sequence max(by:)用法及代碼示例
- Swift Sequence elementsEqual(_:)用法及代碼示例
- Swift Sequence enumerated()用法及代碼示例
- Swift Sequence contains(where:)用法及代碼示例
- Swift Sequence dropLast(_:)用法及代碼示例
- Swift Sequence dropFirst(_:)用法及代碼示例
- Swift Sequence compactMap(_:)用法及代碼示例
- Swift Sequence map(_:)用法及代碼示例
- Swift Sequence forEach(_:)用法及代碼示例
- Swift Sequence flatMap(_:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Sequence sorted(by:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。