文書   >   Swift   >   Array   >   sort(by:)


インスタンスメソッド


sort(by:)


与えられた述語を要素間の比較として使用して、コレクションをその場で並べ替えます。





宣言


mutating func sort(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows

パラメータ


areInIncreasingOrder最初の引数を 2 番目の引数の前に並べるべき場合に true を返す述語 (predicate)。そうでなければ、false。並べ替え中に areInIncreasingOrder がエラーを throw した場合、要素の順序は異なる場合がありますが、どれも失われることはありません。


議論


Comparable プロトコルに準拠していない要素のコレクションを並べ替える場合は、このメソッドにクロージャを渡して、最初の要素を 2 番目の要素より前に並べ替えるべき場合は true を返します。


以下の例では、クロージャが HTTP の応答を記述するカスタム列挙の配列の順序付けを提供しています。述語 (predicate) は、成功する前にエラーを順序付けし、エラー応答をエラーコードで並べ替えます。


enum HTTPResponse {
    case ok
    case error(Int)
}

var responses: [HTTPResponse] = [.error(500), .ok, .ok, .error(404), .error(403)]
responses.sort {
    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(responses)
// Prints "[.error(403), .error(404), .error(500), .ok, .ok]"


あるいは、並べ替えを昇順ではなく降順にする場合は、このメソッドを使用して Comparable に準拠する要素のコレクションを並べ替えます。述語 (predicate) として大なり演算子 (>) を渡します。


var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort(by: >)
print(students)
// Prints "["Peter", "Kweku", "Kofi", "Akosua", "Abena"]"


areInIncreasingOrder は、要素に対して 厳密に弱い順序付け でなければなりません。つまり、すべての要素 a、b、および c について、以下の条件が成り立たなければなりません。


並べ替えアルゴリズムは安定しているとは限りません。安定した並べ替えは、areInIncreasingOrder が順序を確立しない要素の相対順序を保持します。


複雑さ:O(n log n)、ここで n はコレクションの長さです。


以下も見よ





配列の要素を並べ替え

















トップへ












トップへ












トップへ












トップへ












トップへ
目次
Xcode の新機能

  • SDK
  • Xcode 8.0+
  • フレームワーク
  • Swift 標準ライブラリ

  • 宣言
  • パラメータ
  • 議論
  • 以下も見よ












  • トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)












    トップへ(Foundation)