文書   >   Swift   >   Swift 標準ライブラリ   >   Collections   >   Sequence and Collection Protocols   >   MutableCollection   >   sort(by:)


インスタンスメソッド


sort(by:)


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





宣言


mutating func sort(by areInIncreasingOrder: (Self.Element, Self.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]"


コレクションの要素を降順で並べ替えるには、大なり演算子 (>) を sort(by:) メソッドに渡して下さい。


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


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


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





目次
Xcode の新機能

  • SDK
  • Xcode 8.3+
  • フレームワーク
  • Swift 標準ライブラリ
  • 宣言
  • パラメータ
  • 議論












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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