文書   >   Swift   >   Swift 標準ライブラリ   >   Collections   >   Sequence and Collection Protocols   >   BidirectionalCollection   >   index(_:offsetBy:limitedBy:)
インスタンスメソッド
index(_:offsetBy:limitedBy:)
与えられたインデックスから指定された距離にあるインデックスを返します。ただし、その距離が与えられた制限インデックスを超えていない限り。
必須。デフォルトの実装が供給されます。
宣言
パラメータ
i | コレクションの有効なインデックス。 |
distance | オフセット i までの距離(distance)。コレクションが BidirectionalCollection プロトコルに準拠していない限り、distance は負であってはいけません。 |
limit | limit として使用すべきコレクションの有効なインデックス。distance > 0 の場合、i より小さい制限 (limit) は効果がありません。同様に、distance < 0 の場合、i より大きい制限は効果がありません。 |
戻り値
インデックス i から distance だけオフセットされたインデックス。ただし、そのインデックスが動作の方向において limit を超えていない限り。その場合 (訳注:そのインデックスが limit を超えた場合)、メソッドは nil を返します。
議論
以下の例では、文字列の開始インデックスから 4 つ進んだインデックスを取得してから、その位置にある文字を印刷します。この操作では、制限された s.endIndex 値を超える必要はないため、成功します。
let s = "Swift"
if let i = s.index(s.startIndex, offsetBy: 4, limitedBy: s.endIndex) {
print(s[i])
}
// Prints "t"
次の例では、s.startIndex から 6 つの位置のインデックスを取得しようとしますが、失敗します。と言うのも、その距離は limit として渡されたインデックスを超えているためです。
let j = s.index(s.startIndex, offsetBy: 6, limitedBy: s.endIndex)
print(j)
// Prints "nil"
distance として渡される値は、コレクションの境界を超えて i をオフセットしてはいけません。limit として渡されたインデックスがこれらの境界を超えてオフセットするのを防げない限り。
複雑さ:コレクションが RandomAccessCollection に準拠している場合は O(1)。それ以外の場合は O(k)、ここで k は distance の絶対値です。
デフォルトの実装
BidirectionalCollection の実装
func index(Self.Index, offsetBy: Int, limitedBy: Self.Index) -> Self.Index?
与えられたインデックスから指定された距離にあるインデックスを返します。ただし、その距離が与えられた制限インデックスを超えていない限り。
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)
トップへ(Swift 標準ライブラリ)