C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のイテレータとは?yield returnによる反復処理の基本を解説

イテレータとは

イテレータ(Iterator)は、コレクションに対して独自の反復処理(イテレーション)を実行するための仕組みです。C#では、yield returnステートメントを使用することで、コレクションの各要素を1つずつ順番に返すことができます。

イテレータは現在の実行位置を記憶しています。そのため、次に反復処理が要求されたときには、前回の続きから次の要素が返されます。この特性により、大量のデータを扱う場合でもメモリ効率の良い処理が可能になります。

サンプルコード

以下は、C#でイテレータを使用する例です。

using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo {
    class Program {
        public static IEnumerable<string> display() {
            int[] arr = new int[] {99, 45, 76};

            foreach (var val in arr) {
                yield return val.ToString();
            }
        }

        public static void Main(string[] args) {
            IEnumerable<string> ele = display();
            foreach (var element in ele) {
                Console.WriteLine(element);
            }
        }
    }
}

実行結果

99
45
76

コードの解説

上記の例では、イテレータメソッド display()yield ステートメントを使って、配列の要素を1つずつ返しています。

public static IEnumerable<string> display() {
    int[] arr = new int[] {99, 45, 76};

    foreach (var val in arr) {
        yield return val.ToString();
    }
}

yield returnが実行されるたびに、現在の要素が呼び出し元へ返され、メソッドの実行状態は一時停止します。そして、次の要素が要求された時点で、ループの途中から処理が再開される仕組みです。

戻り値は IEnumerable<string> 型として受け取られ、foreach ループによって各要素を順番に取り出してコンソールに表示しています。

IEnumerable<string> ele = display();
foreach (var element in ele) {
    Console.WriteLine(element);
}

押さえておきたいポイント

  • イテレータは yield return を使って要素を1つずつ返す
  • 戻り値の型は IEnumerable<T> または IEnumerator<T> を指定する
  • 実行位置が記憶されるため、遅延評価(必要なときに必要な分だけ処理)が可能
  • 全要素を一括でメモリに保持しないため、パフォーマンス面でも有利
  1. Pythonでジェネレーターを使ってイテレーターを作成できる?yieldの基本と実装方法を解説

    はい、Pythonではジェネレーターを使用してイテレーターを作成できます。ジェネレーターはyieldキーワードを使うことで簡単に定義でき、イテレーターとして振る舞う関数を宣言するための仕組みです。 Pythonのジェネレーターは、イテレーターを手軽に作成するためのシンプルな方法であり、主にイテレーターのように動作する関数を宣言する際に使われます。 ジェネレーターとは、一度に1つの値ずつ順番に取り出しながら反復処理(イテレーション)を行える関数のことです。日々のプログラミングでは、リスト、文字列、辞書(dict)などのイテラブルオブジェクトを頻繁に利用します。 イテレーターとは、ループ処理によっ

  2. Pythonのitertoolsモジュールで効率的なイテレータを作成する方法

    多くのプログラミング言語と同様に、Pythonにもwhile文とfor文というループ構造が用意されています。特にfor文は、リスト・タプル・文字列などのイテラブル(反復可能オブジェクト)を走査する際に非常に便利です。さらにPythonの標準ライブラリにはitertoolsモジュールがあり、より高速で効率的な反復処理ツールが定義されています。これらのイテレータ構成要素は、HaskellやSMLといった関数型プログラミング言語における類似ツールの「Pythonらしい(Pythonic)」実装です。 itertoolsモジュールの関数は3種類 itertoolsモジュールに含まれる関数は、以下の3つ