インスタンスメソッド


sorted(by:)


要素間の比較として与えられた述語を使用して並べ替えられたシーケンスの要素を返します。


System Swift iOS 14.0+ iPadOS 14.0+ Mac Catalyst 14.0+

macOS 11.0+ tvOS 14.0+ visionOS 1.0+ watchOS 7.0+

func sorted(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> [Self.Element]




パラメータ


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"]"

述語は、要素に対して 厳密に弱い順序付け でなければなりません。つまり、任意の要素 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)、ここで、n はシーケンスの長さです。

    注意

    シーケンスをシャッフルするために使用されるアルゴリズムは、Swift の将来のバージョンで変更される可能性があります。あなたのプログラムを実行するたびに同じシャッフル順序になるジェネレータを渡す場合、プログラムが異なるバージョンの Swift を使用してコンパイルされると、そのシーケンスが変わる可能性があります。













    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ












    トップへ