Swift Academy · レッスン

SequenceとCollectionの階層

Sequence と Collection (およびBidirectional/RandomAccess)の違いを理解します。走査の保証、インデックス、より強いプロトコルがアルゴリズムに必要となる場面を学びます。

レッスン 1/38 ステップ

「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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. SequenceとCollectionの階層
  2. Map/Filter/Reduceとlazyシーケンス
  3. カスタムイテレーターとパフォーマンスのヒント
← Swift Academyに戻る