文書   >   Swift   >   Swift 標準ライブラリ >     Collections   >   Supporting Types   >   Slice   >   sort(by:)


インスタンスメソッド


sort(by:)


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





宣言


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


パラメータ


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


議論


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


predicate (述語) は要素に対して 厳密に弱い順序 でなければなりません。つまり、任意の要素 a、b、および c に対して、以下の条件が成り立たなければなりません。


並べ替えアルゴリズムは安定していません。不安定な並べ替えは、areInIncreasingOrder が順序を確立しない要素の相対的な順序を変更する可能性があります。


以下の例では、クロージャは、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"]"





目次
Xcode の新機能

  • 言語:Swift
  • SDK
  • Xcode 9.3+
  • フレームワーク
  • Swift 標準ライブラリ
  • 宣言
  • 議論












  • トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)