文書   >   Foundation   >   Collections   >   Set   >   sorted()
インスタンスメソッド
sorted(by:)
与えられた述語 (predicate) を要素間の比較として使用して、並べ替えられたシーケンスの要素を返します。
宣言
パラメータ
areInIncreasingOrder | 最初の引数を 2 番目の引数の前に並べるべき場合に true を返す述語 (predicate)。そうでなければ、false。 |
戻り値
シーケンスの要素の並べ替えられた配列。
議論
Comparable プロトコルに準拠していない要素のシーケンスを並べ替える場合は、最初の要素を 2 番目の要素の前に順序付けるべきときに true を返す述語をこのメソッドに渡します。結果の配列の要素は、与えられた述語に従って並べられます。
以下の例では、述語 (predicate) はカスタムの HTTPResponse 型の配列の順序付けを提供します。述語は、成功する前にエラーを順序付けし、エラー応答をエラーコードで並べ替えします。
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"]"
述語は、要素に対して 厳密に弱い順序付け でなければなりません。つまり、すべての要素 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 はシーケンスの長さです。
以下も見よ
Set の変形
func map<T>((Element) -> T) -> [T]
与えられたクロージャをシーケンスの要素にマッピングした結果を含む配列を返します。
func compactMap<ElementOfResult>((Element) -> ElementOfResult?) -> [ElementOfResult]
このシーケンスの各要素を使用して、与えられた変換を呼び出した結果の nil 以外の結果を含む配列を返します。
func flatMap<SegmentOfResult>((Element) -> SegmentOfResult) -> [SegmentOfResult.Element]
このシーケンスの各要素を使用して、与えられた変換を呼び出した結果を連結したものを含む配列を返します。
func flatMap<ElementOfResult>((Element) -> ElementOfResult?) -> [ElementOfResult]
  廃止  
func reduce<Result>(Result, (Result, Element) -> Result) -> Result
与えられたクロージャを使用してシーケンスの要素を組み合わせた結果を返します。
func reduce<Result>(into: Result, (inout Result, Element) -> ()) -> Result
与えられたクロージャを使用してシーケンスの要素を組み合わせた結果を返します。
並べ替えられたシーケンスの要素を返します。
Element が Comparable に準拠している場合利用可能です。
func shuffled() -> [Element]
シーケンスの要素をシャッフルして返します。
func shuffled<T>(using: inout T) -> [Element]
乱数の発生源として与えられた発生器を使用してシャッフルされた、シーケンスの要素を返します。
var lazy: LazySequence<Set<Element>>
このシーケンスと同じ要素を含むが、map や filter などの一部の操作が遅延的に実装されているシーケンス。
トップへ
トップへ
トップへ
トップへ
トップへ