SwiftのArraySliceと部分配列の使い方を完全解説!初心者でもわかるスライスの基本
生徒
「Swiftで配列の一部分だけを取り出すことってできますか?」
先生
「はい、SwiftではArraySlice(アレイスライス)を使って、配列の一部だけを簡単に取り出すことができますよ。」
生徒
「それって、ふつうの配列とどう違うんですか?」
先生
「それでは、ArraySliceと配列の違いや使い方を詳しく見ていきましょう!」
1. ArraySlice(アレイスライス)とは?
ArraySliceは、SwiftのArray(配列)から一部の要素だけを取り出したときに使われる特別な型です。
たとえば、10個のデータがある配列から「2番目から5番目だけ使いたい」といった場合に便利です。スライスとは、「一部を切り取ったもの」という意味で、まさにその名の通り、配列の一部分だけを扱うときに使います。
2. 部分配列を作る方法|スライスの基本
それでは、実際にArraySliceを使って、配列の一部を取り出してみましょう。
let numbers = [10, 20, 30, 40, 50, 60]
let slice = numbers[1...3]
print(slice)
この例では、numbers[1...3]と指定することで、2番目〜4番目の値(20, 30, 40)を取り出しています。
このときsliceの型はArraySlice<Int>になります。
3. ArraySliceとArrayの違いとは?
ArraySliceは見た目は配列と似ていますが、インデックスの扱いが異なるのがポイントです。
let numbers = [100, 200, 300, 400, 500]
let slice = numbers[2...4]
print(slice[2]) // 300
ここでslice[2]と書くと、元の配列のインデックス2(300)がそのまま使えます。
ただし、スライスのインデックスは0からではなく、元の配列の位置を引き継いでいる点に注意が必要です。
4. スライスを通常の配列(Array)に戻すには?
ArraySliceはそのままでは使いにくい場面もあります。特にインデックスを0から始めたいときなどは、Arrayに変換しましょう。
let numbers = [5, 10, 15, 20, 25]
let slice = numbers[1...3]
let newArray = Array(slice)
print(newArray)
Array(slice)のように書くことで、スライスをふつうの配列に変換できます。
5. スライスの範囲指定|startIndexとendIndexを使おう
スライスでは、startIndexとendIndexプロパティを使って、開始位置や終了位置を動的に調べることもできます。
let names = ["さくら", "たけし", "ひろし", "あや", "まこと"]
let slice = names[1...3]
print("開始位置: \(slice.startIndex)")
print("終了位置: \(slice.endIndex)")
endIndexは「最後の要素の次の位置」を指すので、forループなどで使うときに便利です。
6. スライスの活用場面|大量データの処理に最適
ArraySliceは、実はメモリの節約にも役立ちます。
元の配列を丸ごとコピーするのではなく、「見た目だけ一部分を切り出す」ため、データ量が多い場合には非常に効率的です。
たとえば、10000件ある配列から最初の100件だけを処理したいときに、わざわざ新しい配列を作るよりも、スライスを使った方が軽くて速くなります。
7. for文でスライスをループ処理する方法
ArraySliceもArrayと同じようにfor-in文で1つずつ取り出すことができます。
let data = [1, 2, 3, 4, 5, 6]
let part = data[2...4]
for value in part {
print(value)
}
このようにスライスした部分だけを効率よく処理できます。
8. スライスの注意点|データの変更と参照について
ArraySliceは、元の配列とメモリを共有しているため、元の配列が変更されるとスライスの内容も変わる可能性があります。
var scores = [70, 80, 90, 100]
let slice = scores[1...2]
scores[1] = 85
print(slice)
このように、スライスは「元の配列の一部を参照している」という性質を持つので、変更が必要な場合はArrayに変換して使うのが安全です。
9. 配列の一部を取り出すテクニックまとめ(一覧)
| 操作 | 使い方 | 用途 |
|---|---|---|
numbers[1...3] |
範囲でスライスを作成 | 部分配列の取り出し |
Array(slice) |
スライスを配列に変換 | インデックスのリセット |
slice.startIndex |
開始位置を取得 | ループ処理などに活用 |
slice.endIndex |
終了位置(次の位置) | for文と組み合わせ |