文書   >   Swift   >   Swift 標準ライブラリ >     Collections   >   Supporting Types   >   Slice   >   partition(by:)
インスタンスメソッド
partition(by:)
与えられた predicate (述語) と一致するすべての要素が、一致しないすべての要素の後にくるように、コレクションの要素を並べ替えます。
宣言
mutating func partition(by belongsInSecondPartition: (Base.Element) throws -> Bool) rethrows -> Base.Index
パラメータ
belongsInSecondPartition | コレクションを分割するために使用される predicate (述語) 。この述語を満たすすべての要素は、それを満たさないすべての要素の後に順序付けられます。 |
戻り値
belongsInSecondPartition と一致する並べ替えられたコレクション内の最初の要素のインデックス。 コレクション内のどの要素も belongsInSecondPartition と一致しない場合、返されるインデックスはコレクションの endIndex と等しくなります。
議論
コレクションを分割した後、かなめのインデックス p があり、p の前の要素が belongsInSecondPartition の predicate (述語) を満たさず、p 以降のすべての要素が belongsInSecondPartition を満たします。
以下の例では、数値の配列は、30 を超える要素に一致する predicate (述語) で区切られています。
var numbers = [30, 40, 20, 30, 30, 60, 10]
let p = numbers.partition(by: { $0 > 30 })
// p == 5
// numbers == [30, 10, 20, 30, 30, 60, 40]
数字の配列は今や 2 つのパーティションに配置されています。最初のパーティション、数字の [..<p] は、30 を超えない要素で構成されています。2 番目のパーティション、数字の [p ...] は、30 を超える要素で構成されています。
let first = numbers[..<p] // first == [30, 10, 20, 30, 30] let second = numbers[p...] // second == [60, 40]
複雑さ:O(n)、ここで n はシークエンスの長さです。