ArraySliceのインデックスの仕組み
スライスのインデックスが元の位置を保持する理由を理解します。
「ArraySliceのインデックスの仕組み」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
スライスは元のインデックスを保持する
重要な点として、ArraySlice は 0 からインデックスを振り直しません。親配列で持っていたインデックスをそのまま保持します。
let arr = [10, 20, 30, 40, 50]
let slice = arr[2..<5]
print(slice.startIndex)
print(slice.endIndex)startIndex は常に 0 とは限らない
スライスの startIndex は、作成時に使用した下限と同じです。arr[2..<5] の開始インデックスは 2 になります。
let arr = [1, 2, 3, 4, 5, 6]
let slice = arr[3..<6]
print("start:", slice.startIndex)
print("first value:", slice[slice.startIndex])スライスへの添字アクセス
インデックスは保持されるため、スライス自身のインデックスを使う必要があります。インデックス 2 から始まるスライスで slice[0] にアクセスすると、実行時にクラッシュします。
let arr = [100, 200, 300, 400]
let slice = arr[2..<4]
print(slice[2])
print(slice[3])startIndex を安全に使う
スライスがどこから始まるかに関係なく最初の要素を取得するには、slice.first または slice[slice.startIndex] を使用してください。
let arr = [5, 6, 7, 8, 9]
let slice = arr[2..<5]
print(slice.first ?? -1)
print(slice[slice.startIndex])endIndex は最後の次を指す
配列と同様に、endIndex は最後の有効な要素の1つ先を指します。endIndex に添字アクセスすることはできません。
let arr = [11, 22, 33, 44]
let slice = arr[1..<3]
print("endIndex:", slice.endIndex)
print("last valid:", slice[slice.endIndex - 1])個数とインデックスの違い
スライスの count は要素数であり、endIndex とは異なる場合があります。count が最後のインデックスと同じだと決めつけないでください。
let arr = [0, 1, 2, 3, 4, 5]
let slice = arr[3..<6]
print("count:", slice.count)
print("startIndex:", slice.startIndex)indices プロパティ
indices プロパティを使うと、スライスの有効なインデックス範囲を安全に反復できます。
let arr = [10, 20, 30, 40, 50]
let slice = arr[1..<4]
for i in slice.indices {
print(i, slice[i])
}インデックスを保持する理由
インデックスを保持すると、特別な管理をしなくても、スライス内の位置を元の配列に対応付けられます。取得したインデックスは親配列でも有効です。
let arr = ["a", "b", "c", "d", "e"]
let slice = arr[2..<5]
if let idx = slice.firstIndex(of: "d") {
print("found at parent index:", idx)
print("parent has:", arr[idx])
}enumerate は 0 から始まる
0 を基準にした位置が必要な場合は、enumerated() を使用してください。スライスの startIndex に関係なく、0 から始まるオフセットが生成されます。
let arr = [9, 8, 7, 6, 5]
let slice = arr[2..<5]
for (offset, value) in slice.enumerated() {
print(offset, value)
}先頭からの距離
インデックスから 0 基準のオフセットを計算するには、distance(from:to:) を使用してください。
let arr = [1, 2, 3, 4, 5]
let slice = arr[2..<5]
let idx = slice.startIndex + 1
let offset = slice.distance(from: slice.startIndex, to: idx)
print("offset:", offset, "value:", slice[idx])よくあるバグ
スライスが親のインデックスを保持することを忘れるのは、Swift でよくあるバグの原因です。ハードコードした 0 ではなく、常に first、enumerated()、または startIndex を優先してください。
let arr = [100, 200, 300, 400, 500]
let slice = arr[3..<5]
// Safe: use first, not slice[0]
print(slice.first ?? 0)確認問題
スライスのインデックスについて考えてみましょう。
まとめ
ArraySlice は親配列のインデックスを保持するため、その startIndex は 0 ではなく下限になります。安全にアクセスするには first、startIndex、indices、または enumerated() を使用し、ハードコードした 0 は決して使わないでください。
let slice = [5, 6, 7, 8, 9][3..<5]
print(slice.startIndex, slice.first ?? -1)AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「ArraySliceのインデックスの仕組み」レッスンは無料ですか?
はい。「ArraySliceのインデックスの仕組み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「ArraySliceのインデックスの仕組み」で何を学びますか?
スライスのインデックスが元の位置を保持する理由を理解します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ArraySliceのインデックスの仕組み」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 範囲によるスライスの作成
- ArraySliceのインデックスの仕組み
- スライスを配列に戻す
- prefix、suffix、dropFirst