文書   >   Swift   >   Swift 標準ライブラリ >     Collections   >   Supporting Types   >   Slice
汎用構造体
Slice
別のコレクションの要素の部分シーケンスへのビュー。
概観
スライスは、基本となるコレクションとビューの開始および終了インデックスを保管します。コレクションの要素を別の保管場所にコピーすることはありません。したがって、スライスの作成には O(1) の複雑さがあります。
スライスはインデックスを共有する
スライスのインデックスは、基本となるコレクションのインデックスと互換的に使用できます。スライスの要素は、スライスが作成されてからコレクションもスライスも変更されていない限り、スライスと基本となるコレクションの同じインデックスの下にあります。
たとえば、セッション中に各クラスからの欠席数を保持する配列があるとします。
var absences = [0, 2, 0, 4, 0, 3, 1, 0]
あなたは、セッションの後半に欠席の多い日を見つけることを任されています。問題の日のインデックスを見つけるには、以下の手順に従います。
- 後半の日を保持する absences (欠席) 配列のスライスを作成します。
- max(by:) メソッドを使用して、欠席が最も多い日のインデックスを決定します。
- 元の absences 配列に手順 2 で見つかったインデックスを使用して、結果を印刷します。
これらの手順の実装は次のとおりです。
let secondHalf = absences.suffix(absences.count / 2)
if let i = secondHalf.indices.max(by: { secondHalf[$0] < secondHalf[$1] }) {
print("Highest second-half absences: \(absences[i])")
}
// Prints "Highest second-half absences: 3"
スライスはセマンティクス (意味) を継承する
スライスは、その基本となるコレクションの値または参照セマンティクスを継承します。つまり、Slice インスタンスが配列などの値セマンティクスを持つ可変コレクションにラップされた場合、元のコレクションを変更するとそのコレクションのコピーがトリガーされ、スライスの内部に格納された基本となるコレクションには影響しません。
たとえば、absences 配列の最後の要素を 0 から 2 に更新しても、secondHalf スライスは変更されません。
absences[7] = 2 print(absences) // Prints "[0, 2, 0, 4, 0, 3, 1, 2]" print(secondHalf) // Prints "[0, 3, 1, 0]"
スライスは過渡的な計算にのみ使用してください。スライスは、基本となるコレクションの寿命が終了した後でも、それが提示する部分だけでなく、大きなコレクションの保管場所全体への参照を保持することができます。したがって、スライスの長期保管場所は、もはや他の方法ではアクセスできない要素の寿命を延ばす可能性があり、誤ってメモリリークのように見える可能性があります。
変更可能なコレクションで Slice インスタンスを使用するには、基本となるコレクションの subscript(_: Index) セッタがインデックスを無効化しないようにする必要があります。カスタムコレクション型のインデックスを無効にする変更が必要な場合は、Slice をその部分シーケンス型として使用しないでください。代わりに、インデックス無効化要件を考慮した独自の部分シーケンス型を定義します。
トピックス
型エイリアス
イニシャライザ
シーケンスの要素を含むコレクションの新しいインスタンスを作成します。
init(base: Base, bounds: Range<Base.Index>)
与えられたコレクションへのビューを作成し、指定された範囲内の要素にアクセスできるようにします。
init(repeating: Base.Element, count: Int)
指定された数の単一の、繰り返し値を含む新しいコレクションを作成します。
init(repeating: Base.Element, count: Int)
インスタンスプロパティ
スライスの基礎となるコレクション。
コレクション内の要素の数。
self と同一です。
コレクションの最初の要素。
var indices: DefaultIndices<Slice<Base>>
昇順でコレクションをサブスクリプトするのに有効なインデックス。
var indices: Range<Base.Index>
昇順でコレクションをサブスクリプトするのに有効なインデックス。
コレクションが空であるかどうかを示すブール値。
コレクションの最後の要素。
var lazy: LazyCollection<Slice<Base>>
このコレクション上のビューで、map や filter などの通常の操作の遅延した実装を提供します。
var lazy: LazySequence<Slice<Base>>
このシーケンスと同じ要素を含むシーケンスですが、map や filter などの一部の操作は遅延して実装されます。
var lazy: LazySequence<Slice<Base>>
var lazy: LazyCollection<Slice<Base>>
シーケンス内の要素の数以下の値。非破壊的に計算されます。
コレクション内の要素の数以下の値。
インスタンスメソッド
func allSatisfy((Base.Element) -> Bool) -> Bool
シーケンスのすべての要素が、与えられた predicate (述語) を満たすかどうかを示すブール値を返します。
コレクションの最後に要素を追加します。
func append<S>(contentsOf: S)
このコレクションの最後にシーケンスまたはコレクションの要素を追加します。
このシーケンス上での与えられた変換をマッピングした nil でない結果を返します。
このコレクションでの与えられた変換をマッピングした、nil でない結果を返します。
func compactMap<ElementOfResult>((Base.Element) -> ElementOfResult?) -> [ElementOfResult]
このシーケンスの各要素で、与えられた変換を呼び出す nil でない結果を含む配列を返します。
func contains(Base.Element) -> Bool
シーケンスに、与えられた要素が含まれているかどうかを示すブール値を返します。
func contains(where: (Base.Element) -> Bool) -> Bool
シーケンスに、与えられた predicate (述語) を満たす要素が含まれているかどうかを示すブール値を返します。
func distance(from: Slice<Base>.Index, to: Slice<Base>.Index) -> Int
func drop(while: (Base.Element) -> Bool) -> Slice<Base>
predicate (述語) が true を返し、残りの要素を返す間に、要素をスキップして部分シーケンスを返します。
func dropFirst() -> Slice<Base>
シーケンスの最初の要素を除くすべての要素を含む部分シーケンスを返します。
func dropFirst(Int) -> Slice<Base>
初めの与えられた数の要素を除くすべての要素を含む部分シーケンスを返します。
func dropLast() -> Slice<Base>
シーケンスの最後の要素を除くすべての要素を含む部分シーケンスを返します。
func dropLast(Int) -> Slice<Base>
指定された数の最後の要素を除くすべての要素を含む部分シーケンスを返します。
func elementsEqual<OtherSequence>(OtherSequence) -> Bool
このシーケンスと別のシーケンスに同じ要素が同じ順序で含まれているかどうかを示すブール値を返します。
与えられた predicate (述語) を等価テストとして使用して、このシーケンスと別のシーケンスが同じ順序で同等の要素を含んでいるかどうかを示すブール値を返します。
func enumerated() -> EnumeratedSequence>Slice<Base>>
ペア (n、x) のシーケンスを返します。ここで n はゼロから始まる連続する整数を表し、x はシーケンスの要素を表します。
func filter((Self.Element) -> Bool)
与えられた predicate (述語) を満たすシーケンスの要素を順番に含む配列を返します。
func first(where: (Self.Element) -> Bool)
与えられた predicate (述語) を満たすシーケンスの最初の要素を返します。
func firstIndex(of: Base.Element) -> Base.Index?
指定された値がコレクションに現れる最初のインデックスを返します。
func firstIndex(where: (Base.Element) -> Bool) -> Base.Index?
コレクションの要素が、与えられた predicate (述語) を満たす最初のインデックスを返します。
func flatMap((Base.Element) -> String?) -> [String]
  廃止  
func forEach((Base.Element) -> Void)
for-in ループと同じ順序で、シーケンス内の各要素に、与えられたクロージャを呼び出します。
func formIndex(inout Base.Index, offsetBy: Int)
与えられたインデックスを指定された距離だけオフセットします。
func formIndex(inout Base.Index, offsetBy: Int, limitedBy: Base.Index) -> Bool
与えられたインデックスを指定された距離だけオフセットするか、または与えられた制限インデックスと等しくなるようにオフセットします。
func formIndex(after: inout Slice<Base>.Index)
func formIndex(before: inout Slice<Base>.Index)
func index(Slice<Base>.Index, offsetBy: Int) -> Slice<Base>.Index
func index(after: Slice<Base>.Index) -> Slice<Base>.Index
func index(before: Slice<Base>.Index) -> Slice<Base>.Index
func insert(Base.Element, at: Base.Index)
コレクション内の指定された位置に新しい要素を挿入します。
func insert(Base.Element, at: Slice<Base>.Index)
func insert(Base.Element, at: Slice<Base>.Index)
func insert<S>(contentsOf: S, at: Slice<Base>.Index)
func insert<S>(contentsOf: S, at: Slice<Base>.Index)
func insert<C>(contentsOf: C, at: Base.Index)
コレクションの指定された位置にシーケンスの要素を挿入します。
func joined() -> FlattenSequence<Slice<Base>>
連結されたこの一連のシーケンスの要素を返します。
func joined() -> FlattenCollection<Slice<Base>>
連結されたこの一連のコレクションの要素を返します。
func joined() -> LazySequence<FlattenSequence<Slice<Base>>>
この一連のシーケンスの要素を連結する遅延したシーケンスを返します。
func joined() -> LazyCollection<FlattenCollection<Slice<Base>>>
self の要素の連結。
func joined<Separator>(separator: Separator) -> JoinedSequence<Slice<Base>>
各要素の間に与えられたセパレータを挿入して、この一連のシーケンスの連結した要素を返します。
func joined(separator: String) -> String
シーケンスの要素を連結し、各要素間に与えられたセパレータを追加して新しい文字列を返します。
func joined(separator: String) -> String
シーケンスの要素を連結し、各要素間に与えられたセパレータを追加して新しい文字列を返します。
func last(where: (Base.Element) -> Bool) -> Base.Element?
与えられた predicate (述語) を満たすシーケンスの最後の要素を返します。
func lastIndex(of: Base.Element) -> Base.Index?
指定された値がコレクションに現れる最後のインデックスを返します。
func lastIndex(where: (Base.Element) -> Bool) -> Base.Index?
与えられた predicate (述語) に一致するコレクション内の最後の要素のインデックスを返します。
func lexicographicallyPrecedes<OtherSequence>(OtherSequence) -> Bool
要素を比較するために小なり演算子 (<) を使用して、順序が辞書順で、シーケンスが別のシーケンスの前にあるかどうかを示すブール値を返します。
与えられた predicate (述語) を使用して要素を比較して、辞書の順序でシーケンスが別のシーケンスの前にあるかどうかを示すブール値を返します。
func makeIterator() -> IndexingIterator<Slice<Base>>
コレクションの要素の繰り返し因子 (iterator) を返します。
func map<U>((Base.Element) -> U) -> LazyMapSequence<Slice<Base>, U>
このシーケンス上の LazyMapSequence を返します。結果の要素は、基本となる要素の transform 関数を呼び出すことによって、読み込まれるたびに遅延して計算されます。
func map<U>((Base.Element) -> U) -> LazyMapCollection<Slice<Base>, U>
このコレクションに対する LazyMapCollection を返します。結果の要素は、基本となる要素の transform 関数を呼び出すことによって、読み込まれるたびに遅延して計算されます。
func map<T>((Base.Element) -> T) -> [T]
与えられたクロージャをシーケンスの要素にマッピングした結果を含む配列を返します。
func map<T>((Base.Element) -> T) -> [T]
与えられたクロージャをシーケンスの要素にマッピングした結果を含む配列を返します。
シーケンス内の最大要素を返します。
func max(by: (Base.Element, Base.Element) -> Bool) -> Base.Element?
与えられた predicate (述語) を要素間の比較として使用して、シーケンス内の最大要素を返します。
シーケンスの最小要素を返します。
func min(by: (Base.Element, Base.Element) -> Bool) -> Base.Element?
与えられた predicate (述語) を要素間の比較として使用して、シーケンス内の最小要素を返します。
func partition(by: (Base.Element) -> Bool) -> Base.Index
与えられた predicate (述語) と一致するすべての要素が、一致しないすべての要素の後にくるように、コレクションの要素を並べ替えます。
func partition(by: (Base.Element) -> Bool) -> Base.Index
与えられた predicate (述語) と一致するすべての要素が、一致しないすべての要素の後にくるように、コレクションの要素を並べ替えます。
func popFirst() -> Base.Element?
コレクションの最初の要素を削除して返します。
func popLast() -> τ_0_0.Element?
コレクションの最後の要素を削除して返します。
func popLast() -> Base.Element?
コレクションの最後の要素を削除して返します。
func popLast() -> Base.Element?
コレクションの最後の要素を削除して返します。
func prefix(Int) -> Slice<Base>
コレクションの最初の要素を含む、指定された最大長までの部分シーケンスを返します。
func prefix(through: Base.Index) -> Slice<Base>
コレクションの先頭から指定された位置までの部分シーケンスを返します。
func prefix(upTo: Base.Index) -> Slice<Base>
コレクションの先頭から指定された位置までの、指定位置を含まない部分シーケンスを返します。
func prefix(while: (Base.Element) -> Bool) -> Slice<Base>
predicate (述語) が false を返し、残りの要素をスキップするまで、最初の要素を含む部分列を返します。
func randomElement() -> Base.Element?
コレクションのランダムな要素を返します。
func randomElement<T>(using: inout T) -> Base.Element?
与えられたジェネレータを乱数のソースとして使用して、コレクションのランダムな要素を返します。
func reduce<Result>(Result, (Result, Base.Element) -> Result) -> Result
与えられたクロージャを使用してシーケンスの要素を結合した結果を返します。
func reduce<Result>(into: Result, (inout Result, Base.Element) -> ()) -> Result
与えられたクロージャを使用してシーケンスの要素を結合した結果を返します。
func remove(at: Base.Index) -> Base.Element
指定された位置にある要素を削除して返します。
func remove(at: Slice<Base>.Index) -> Base.Element
func remove(at: Slice<Base>.Index) -> Base.Element
func removeAll(keepingCapacity: Bool)
コレクションからすべての要素を削除します。
func removeAll(where: (Base.Element) -> Bool)
与えられた predicate (述語) を満たすすべての要素を削除します。
func removeAll(where: (Base.Element) -> Bool)
与えられた predicate (述語) を満たすすべての要素を削除します。
func removeFirst() -> Base.Element
コレクションの最初の要素を削除して返します。
func removeFirst() -> Base.Element
コレクションの最初の要素を削除して返します。
func removeFirst() -> Base.Element
コレクションの最初の要素を削除して返します。
指定された数の要素をコレクションの先頭から削除します。
指定された数の要素をコレクションの先頭から削除します。
指定された数の要素をコレクションの先頭から削除します。
func removeLast() -> τ_0_0.Element
コレクションの最後の要素を削除して返します。
func removeLast() -> Base.Element
コレクションの最後の要素を削除して返します。
func removeLast() -> Base.Element
コレクションの最後の要素を削除して返します。
与えられた数の要素をコレクションの末尾から削除します。
指定された数の要素をコレクションの末尾から削除します。
指定された数の要素をコレクションの末尾から削除します。
指定された部分範囲内の要素をコレクションから削除します。
func removeSubrange(Range<Base.Index>)
指定された部分範囲内の要素をコレクションから削除します。
func removeSubrange(Range<Slice<Base>.Index>)
func removeSubrange(Range<Slice<Base>.Index>)
func replaceSubrange<C>(Range<Slice<Base>.Index>, with: C)
func replaceSubrange<C, R>(R, with: C)
指定された要素の部分範囲を与えられたコレクションに置き換えます。
func replaceSubrange<C>(Range<Slice<Base>.Index>, with: C)
指定された数の要素を、適当な基礎となる型を格納するようにコレクションを準備します。
コレクションの要素をその場で逆にします。
func reversed() -> [Base.Element]
このシーケンスの要素を逆順に含む配列を返します。
コレクションをその場でシャッフルします。
func shuffle<T>(using: inout T)
与えられたジェネレータを乱数のソースとして使用して、コレクションをその場でシャッフルします。
func shuffled() -> [Base.Element]
シャッフルされたシーケンスの要素を返します。
func shuffled<T>(using: inout T) -> [Base.Element]
与えられたジェネレータを乱数のソースとして使用してシャッフルされたシーケンスの要素を返します。
コレクションをその場で並べ替えます。
func sort(by: (Base.Element, Base.Element) -> Bool)
与えられた predicate (述語) を要素間の比較として使用して、コレクションをその場で並べ替えます。
func sorted() -> [Base.Element]
並べ替えられたシーケンスの要素を返します。
func sorted(by: (Base.Element, Base.Element) -> Bool) -> [Base.Element]
与えられた predicate を要素間の比較として使用して並べ替えられた、シーケンスの要素を返します。
与えられた predicate (述語) を満たす要素を含まない、コレクションの可能な最長の部分シーケンスを、順番に返します。
与えられた要素に等しい要素の周りで、シーケンスの可能な最長の部分シーケンスを、順番に返します。
与えられた要素に等しい要素の周りで、コレクションの可能な最長の部分シーケンスを、順番に返します。
func starts<PossiblePrefix>(with: PossiblePrefix) -> Bool
シーケンスの最初の要素が別のシーケンスの要素と同じかどうかを示すブール値を返します。
与えられた predivcate (述語) を等価テストとして使用して、シーケンスの最初の要素が別のシーケンスの要素と等しいかどうかを示すブール値を返します。
func suffix(Int) -> Slice<Base>
コレクションの最後の要素を含む、与えられた最大長までの部分シーケンスを返します。
func suffix(from: Base.Index) -> Slice<Base>
指定された位置からコレクションの最後までの部分シーケンスを返します。
func swapAt(Base.Index, Base.Index)
コレクションの指定されたインデックスの値たちを交換します。
サブスクリプト
subscript(Slice<Base>.Index) -> Base.Element
subscript(Slice<Base>.Index) -> Base.Element
subscript<R>(R) -> Slice<Base>
subscript((UnboundedRange_) -> ()) -> Slice<Base>
subscript(Range<Base.Index>) -> Slice<Slice<Base>>
コレクションの要素の連続した部分範囲にアクセスします。
subscript<R>(R) -> Slice<Base>
範囲式で指定されたコレクションの要素の連続した部分範囲にアクセスします。
subscript((UnboundedRange_) -> ()) -> Slice<Base>
subscript(Range<Base.Index>) -> Slice<Slice<Base>>
コレクションの要素の連続した部分範囲にアクセスします。
subscript(Range<Slice<Base>.Index>) -> Slice<Base>
subscript(Range<Slice<Base>.Index>) -> Slice<Base>
演算子関数
static func + <Other>(Other, Slice<Base>) -> Slice<Base>
シーケンスの要素とコレクションを連結して新しいコレクションを作成します。
static func + <Other>(Slice<Base>, Other) -> Slice<Base>
コレクションの要素とシーケンスを連結して新しいコレクションを作成します。
static func + <Other>(Slice<Base>, Other) -> Slice<Base>
2 つのコレクションの要素を連結して新しいコレクションを作成します。
static func += <Other>(inout Slice<Base>, Other)
範囲を置換可能なコレクションにシーケンスの要素を追加します。
関連
汎用の制約
Base : Collection
以下に準拠
- BidirectionalCollection
- Collection
- LazyCollectionProtocol
- MutableCollection
- RangeReplaceableCollection