SequenceとCollectionの階層
Sequence と Collection (およびBidirectional/RandomAccess)の違いを理解します。走査の保証、インデックス、より強いプロトコルがアルゴリズムに必要となる場面を学びます。
「SequenceとCollectionの階層」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全3レッスンが含まれています。
階層マップ
反復処理の階層:
- Sequence: イテレータによる反復(1回限りの場合があります)。
- Collection: 複数回の走査とインデックスアクセスが可能(startIndex/endIndex)。
- BidirectionalCollection: インデックスを後方へ移動できます。
- RandomAccessCollection: インデックスを定数時間で移動できます。
Sequenceの反復
Sequenceは要素を順番に反復できることを保証します。インデックスや複数回の走査については何も要求されません。
let seq = [1, 2, 3] as AnySequence<Int> // wrap as AnySequence for demo
for x in seq { print(x, terminator: " ") }
print("")Collectionのインデックス
Collectionはインデックスを追加し、複数回の走査を可能にします。安全に再度走査できます。
let arr = ["a","b","c"] // Array is a Collection
print(arr.startIndex == 0) // true for Array
print(arr.endIndex == 3) // endIndex is "one past last"
for i in arr.indices { print(arr[i], terminator: " ") }
print("")
// Iterate again (multi-pass)
for ch in arr { print(ch, terminator: " ") }
print("")より強力な機能
BidirectionalCollectionはインデックスを後方へ移動できます。RandomAccessCollectionはインデックスの移動を定数時間で行えます(例: Array)。
let text = "Swift" // String is a BidirectionalCollection
var i = text.index(before: text.endIndex) // move backward
print(text[i]) // last character
// Array is RandomAccessCollection: jumping indices is cheap
let nums = [10,20,30,40]
print(nums[nums.startIndex.advanced(by: 2)]) // 30カスタムSequence
カスタムSequenceは1回限りの走査になる場合があります。一度反復すると、イテレータを使い切っている可能性があります。
struct Countdown: Sequence, IteratorProtocol {
var current: Int
mutating func next() -> Int? {
guard current >= 0 else { return nil }
defer { current -= 1 }
return current
}
}
var cd = Countdown(current: 3)
for n in cd { print(n, terminator: " ") } // 3 2 1 0
print("")
// cd is exhausted; iterating again yields nothing (single-pass behavior)適切なプロトコルを選ぶ
ガイドライン:
- 1回の走査で十分な場合は、Sequenceに対するジェネリックアルゴリズムを使います。
- 複数回の走査やインデックス操作が必要な場合はCollectionを要求します。
- インデックスを頻繁に飛び越えるアルゴリズム(例: 二分探索)にはRandomAccessCollectionを優先します。
CollectionとSequence
理解度チェック: CollectionはSequenceに何を追加しますか?
まとめ
まとめ: Sequence → 基本的な反復。Collection → インデックスと複数回の走査。Bidirectional → 後方への移動。RandomAccess → インデックスの定数時間移動。アルゴリズムに合う最小限のプロトコルを選びます。
AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「SequenceとCollectionの階層」レッスンは無料ですか?
はい。「SequenceとCollectionの階層」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全3レッスンが含まれています。
「SequenceとCollectionの階層」で何を学びますか?
Sequence と Collection (およびBidirectional/RandomAccess)の違いを理解します。走査の保証、インデックス、より強いプロトコルがアルゴリズムに必要となる場面を学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「SequenceとCollectionの階層」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- SequenceとCollectionの階層
- Map/Filter/Reduceとlazyシーケンス
- カスタムイテレーターとパフォーマンスのヒント