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


インスタンスメソッド


sorted(by:)


指定された predicate を使用して要素間の比較として並べ替えられた、シーケンスの要素を返します。




宣言


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


パラメータ


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


戻り値


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


議論


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


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


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


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


enum HTTPResponse {
    case ok
    case error(Int)
}

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


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


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


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


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





目次
Xcode の新機能

  • 言語:Swift
  • SDK
  • Xcode 9.0+
  • フレームワーク
  • Swift 標準ライブラリ
  • 宣言
  • パラメータ
  • 戻り値
  • 議論












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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












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