文書   >   Swift   >   Array   >   sort(by:)
インスタンスメソッド
sort(by:)
与えられた述語を要素間の比較として使用して、コレクションをその場で並べ替えます。
宣言
パラメータ
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(a, a) は常に false です。(非再帰性)
- areInIncreasingOrder(a, b) 及び areInIncreasingOrder(b, c) が共に true の場合、areInIncreasingOrder(a, c) もまた true です。(推移比較可能性)
- 2 つの要素が、どちらも述語 (predicate) に従って他の要素の前に順序付けされていない場合、比較不可能 です。a と b が比較不可能で、b と c が比較不可能の場合、a と c も比較不可能です。(推移比較不能性)
並べ替えアルゴリズムは安定しているとは限りません。安定した並べ替えは、areInIncreasingOrder が順序を確立しない要素の相対順序を保持します。
複雑さ:O(n log n)、ここで n はコレクションの長さです。
以下も見よ
配列の要素を並べ替え
コレクションをその場で並べ替えます。
Element が Comparable に準拠している場合に利用できます。
並べ替えられたシーケンスの要素を返します。
Element が Comparable に準拠している場合に利用できます。
func sorted(by: (Element, Element) -> Bool) -> [Element]
与えられた述語を要素間の比較として使用して並べ替えられた、シーケンスの要素を返します。
コレクションの要素をその場で逆の順にします。
func reversed() -> ReversedCollection<Array<Element>>
コレクションの要素を逆の順序で表示するビューを返します。
コレクションをその場でシャッフルします。
func shuffle<T>(using: inout T)
乱数の発生源として与えられた発生器を使用して、コレクションをその場でシャッフルします。
func shuffled() -> [Element]
シーケンスの要素をシャッフルして返します。
func shuffled<T>(using: inout T) -> [Element]
乱数の発生源として与えられた発生器を使用して、シャッフルされたシーケンスの要素を返します。
func partition(by: (Element) -> Bool) -> Int
与えられた述語に一致するすべての要素が、一致しないすべての要素の後になるように、コレクションの要素を並べ替えます。
コレクションの指定されたインデックスの値を交換します。
トップへ
トップへ
トップへ
トップへ
トップへ