インスタンスメソッド


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+

func sorted(by areInIncreasingOrder: (UnicodeScalar, UnicodeScalar) throws -> Bool) rethrows -> [UnicodeScalar]





パラメータ


areInIncreasingOrder

最初の引数がその 2 番目の引数の前に順序付けされるべき場合に true を返す述語。それ以外の場合は false



戻り値


シーケンス要素の並べ替えられた配列。



議論


Comparable プロトコルに準拠していない要素のシークエンスを並べ替える場合は、最初の要素を 2 番目の要素の前に並べるべき場合に true を返す述語をこのメソッドに渡します。結果として得られる配列の要素は、与えられた述語に従って順序付けされます。


以下の例では、述語はカスタムの HTTPResponse 型の配列の順序付けを提供します。述語は成功の前にエラーを並べ、エラー コードによってエラー応答を並べ替えます。


  1. enum HTTPResponse {
  2. case ok
  3. case error(Int)
  4. }
  5. let responses: [HTTPResponse] = [.error(500), .ok, .ok, .error(404), .error(403)]
  6. let sortedResponses = responses.sorted {
  7. switch ($0, $1) {
  8. // Order errors by code
  9. case let (.error(aCode), .error(bCode)):
  10. return aCode < bCode
  11. // All successes are equivalent, so none is before any other
  12. case (.ok, .ok): return false
  13. // Order errors before successes
  14. case (.error, .ok): return true
  15. case (.ok, .error): return false
  16. }
  17. }
  18. print(sortedResponses)
  19. // Prints "[.error(403), .error(404), .error(500), .ok, .ok]"


また、このメソッドを使用して、Comparable プロトコルに準拠する要素を降順で並べ替えることもできます。シーケンスを降順で並べ替えるには、大なり演算子 (>)areInIncreasingOrder パラメータとして渡します。


  1. let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
  2. let descendingStudents = students.sorted(by: >)
  3. print(descendingStudents)
  4. // Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"


関連する sorted() メソッドを呼び出すことは、このメソッドを呼び出して、述語として小なり演算子 (<) を渡すことと同じです。


  1. print(students.sorted())
  2. // Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
  3. print(students.sorted(by: <))
  4. // 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 つの要素は、どちらも述語に従って他方より前に順序付けされていない場合、比較できませんab が比較不可能で、bc も比較不可能な場合、ac も比較不可能です。 (推移比較不可能性)

  • 並べ替えアルゴリズムは安定していることが保証されています。安定した並べ替えでは、areInIncreasingOrder で順序が確立されない要素の相対的な順序が保持されます。


    複雑さ:O(n log n)、ここで n はシークエンスの長さです。














    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ