文書   >   Swift   >   Swift 標準ライブラリ   >   Collections   >   Supporting Types   >   PartialRangeFrom   >   sorted(by:)     Beta  
インスタンスメソッド
sorted(by:)
指定された predicate (述語) を要素の比較として並べ替えたシーケンスの要素を返します。
宣言
func sorted(by areInIncreasingOrder: (Bound, Bound) throws -> Bool) rethrows -> [Bound]
パラメータ
areInIncreasingOrder | その最初の引数がその 2 番目の引数の前に順序付けされるべき場合は true を返す predicate (述語)。それ以外の場合は false。 |
戻り値
シーケンスの要素の並べ替えられた配列。
議論
Comparable プロトコルに準拠していない要素のシーケンスを並べ替えたい場合は、渡された最初の要素が 2 番目の要素の前に順序付けされるべきときに true を返すこのメソッドに predicate (述語) を渡します。結果の配列の要素は、与えられた predicate (述語) に従って順序付けされます。
predicate (述語) は要素に対して 厳密に弱い順序 でなければなりません。つまり、任意の要素 a、b、 および c に対して、以下の条件が成り立たなければなりません。
- areInIncreasingOrder(a, a) は常に false です。(非再帰的)
- areInIncreasingOrder(a, b) と areInIncreasingOrder(b, c) とが共に true である時、areInIncreasingOrder(a, c) もまた true です。(推移比較可能性)
- 2 つの要素が、いずれも predicate (述語) に従って other の前に順序付けされていない場合、比較できないものです。a と b が比較できず、b と c が比較できない場合、a と 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"]"
このドキュメントには、開発中の API または技術に関する予備情報が含まれています。この情報は変更されることがあり、このドキュメントに従って実装されたソフトウェアは、最終的なオペレーティングシステムソフトウェアでテストする必要があります。