文書   >   Swift   >   Swift 標準ライブラリ   >   Collections   >   Range   >   subscript(_:)
汎用サブスクリプト
subscript(_:)
範囲式で指定されたコレクションの要素の連続した部分範囲にアクセスします。
宣言
subscript<R>(r: R) -> Range<Bound> where R : RangeExpression, Bound == R.Bound { get }
Bound が Strideable に準拠し、Bound.Stride が SignedInteger に準拠する場合に使用可能です。
パラメータ
bounds | コレクションのインデックス (indices) の範囲。範囲の境界は、コレクションの有効なインデックスでなければなりません。 |
議論
範囲式は、このコレクションを基準にして具体的な部分範囲に変換されます。たとえば、配列で PartialRangeFrom 範囲式を使用すると、範囲式の先頭から配列の最後まで部分範囲にアクセスします。
let streets = ["Adams", "Bryant", "Channing", "Douglas", "Evarts"]
let streetsSlice = streets[2...]
print(streetsSlice)
// ["Channing", "Douglas", "Evarts"]
アクセスされたスライスは、オリジナルのコレクションが使用するのと同じ要素に対して同じインデックスを使用します。この例では、スライス内の文字列の 1 つを streetsSlice で検索し、それから元の配列でそのインデックスを使用します。
let index = streetsSlice.firstIndex(of: "Evarts") // 4 print(streets[index!]) // "Evarts"
そのインデックスが特定の値から始まると仮定するのではなく、常にスライスの startIndex プロパティを使用して下さい。スライスのインデックスの境界外にあるインデックスを使用して要素にアクセスしようとすると、そのインデックスが元のコレクションに対して有効であっても実行時エラーが発生する可能性があります。
print(streetsSlice.startIndex) // 2 print(streetsSlice[2]) // "Channing" print(streetsSlice[0]) // error: Index out of bounds
複雑さ:O(1)
以下も見よ
要素へのアクセス
コレクションの最初の要素。
コレクションの最後の要素。
Bound が Strideable に準拠し、Bound.Stride が SignedInteger に準拠する場合に使用可能です。
subscript(Range<Bound>.Index) -> Range<Bound>.Element
指定された位置にある要素にアクセスします。
Bound が Strideable に準拠し、Bound.Stride が SignedInteger に準拠する場合に使用可能です。
subscript(Range<Range<Bound>.Index>) -> Range<Range<Bound>.Bound>
与えられた範囲で教戒された部分シーケンスにアクセスします。
Bound が Strideable に準拠し、Bound.Stride が SignedInteger に準拠する場合に使用可能です。
subscript((UnboundedRange_) -> ()) -> Range<Bound>
Bound が Strideable に準拠し、Bound.Stride が SignedInteger に準拠する場合に使用可能です。
func randomElement() -> Bound?
コレクションのランダムな要素を返します。
func randomElement<T>(using: inout T) -> Bound?
与えられたジェネレータを乱数のソースとして使用して、コレクションのランダムな要素を返します。