インスタンスメソッド
sorted(by:)
要素間の比較として与えられた述語を使用して、並べ替えられたシーケンスの要素を返します。
iOS 15.0+ iPadOS 15.0+ macOS 12.0+
Mac Catalyst 15.0+
tvOS 15.0+ watchOS 8.0+ visionOS 1.0+
Xcode 13.0+
パラメータ
areInIncreasingOrder
最初の引数がその 2 番目の引数の前に順序付けされるべき場合に true を返す述語。それ以外の場合は false。
戻り値
シーケンス要素の並べ替えられた配列。
議論
Comparable プロトコルに準拠していない要素のシークエンスを並べ替える場合は、最初の要素を 2 番目の要素の前に並べるべき場合に 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"]"
述語 (predicate) は、要素に対して 厳密に弱い順序 でなければなりません。つまり、任意の要素 a、b、c について、以下の条件が満たされなければなりません。
areInIncreasingOrder(a, a) は常に false です。 (非再帰的)
areInIncreasingOrder(a, b) と areInIncreasingOrder(b, c) が両方とも true の場合,areInIncreasingOrder(a, c) もまた true です。 (推移比較可能性)
2 つの要素は、どちらも述語に従って他方より前に順序付けされていない場合、比較できません。a と b が比較不可能で、b と c も比較不可能な場合、a と c も比較不可能です。 (推移比較不可能性)
並べ替えアルゴリズムは安定していることが保証されています。安定した並べ替えでは、areInIncreasingOrder で順序が確立されない要素の相対的な順序が保持されます。
複雑さ:O(n log n)、ここで n はシークエンスの長さです。
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ
トップへ