範囲によるスライスの作成
コピーせずに部分シーケンスを取り出します。
「範囲によるスライスの作成」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
範囲による添字アクセス
配列に範囲を使って添字アクセスしても、Swift は要素を新しい配列にコピーしません。代わりに、元の配列とストレージを共有する ArraySlice を返します。
let numbers = [10, 20, 30, 40, 50]
let slice = numbers[1..<4]
print(slice)
print(type(of: slice))半開区間
..< 演算子は半開区間を作成します。1..<4 にはインデックス 1、2、3 が含まれますが、4 は含まれません。
let letters = ["a", "b", "c", "d", "e"]
let middle = letters[1..<4]
print(middle)閉区間によるスライス
上限を含めたい場合は、閉区間の ... を使用してください。1...3 はインデックス 1、2、3 を対象にします。
let scores = [88, 92, 75, 64, 99]
let closed = scores[1...3]
print(closed)片側範囲
Swift は片側範囲をサポートしています。arr[2...] はインデックス 2 から末尾までを意味し、arr[..<2] はインデックス 2 より前のすべてを意味します。
let data = [1, 2, 3, 4, 5, 6]
print(data[3...])
print(data[..<3])スライスはビューである
ArraySlice は親配列へのビューです。要素は変更または変換するまでコピーされないため、作成にかかるコストは小さく済みます。
let big = Array(1...1000)
let window = big[100..<105]
print(window)スライスを反復する
配列と同じようにスライスをループ処理できます。値は親配列が保持している要素と同じです。
let words = ["sun", "moon", "star", "comet"]
let pair = words[1..<3]
for w in pair {
print(w)
}文字列のスライス
スライスは、どのような要素型にも使用できます。ここでは、名前の配列から範囲を取り出しています。
let names = ["Ada", "Bob", "Cleo", "Dan", "Eve"]
let some = names[0..<2]
print(some)count と組み合わせる
配列の count を使って動的に範囲を構築し、最後の数個の要素を取得できます。
let nums = [5, 10, 15, 20, 25]
let lastTwo = nums[(nums.count - 2)..<nums.count]
print(lastTwo)空のスライス
下限と上限が等しい範囲は、空のスライスを生成します。これは有効で安全な操作です。
let arr = [1, 2, 3, 4]
let empty = arr[2..<2]
print(empty)
print(empty.isEmpty)スライスのスライスと合計
スライスも同じプロトコルに準拠しているため、reduce などのメソッドを直接呼び出せます。
let values = [2, 4, 6, 8, 10]
let sum = values[1..<4].reduce(0, +)
print(sum)スライスが重要な理由
スライスを使うと、コピーのコストをかけずに大きな配列の一部分を処理できます。二分探索やスライディングウィンドウなどのアルゴリズムに適しています。
let series = Array(1...20)
let firstHalf = series[..<10]
let secondHalf = series[10...]
print(firstHalf.count, secondHalf.count)確認問題
範囲によるスライスについての理解を確認しましょう。
まとめ
配列に範囲を使って添字アクセスすると、親配列とストレージを共有する ArraySlice が返されます。半開区間の ..< は上限を含まず、閉区間の ... は上限を含みます。また、片側範囲を使うと、先頭部分や末尾部分を低コストで取得できます。
let r = [10, 20, 30, 40]
print(r[1..<3])
print(r[1...])
print(r[..<2])よくある質問
「範囲によるスライスの作成」レッスンは無料ですか?
はい。「範囲によるスライスの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「範囲によるスライスの作成」で何を学びますか?
コピーせずに部分シーケンスを取り出します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「範囲によるスライスの作成」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。