サーチ…


備考

イテレータは、yieldキーワードを使用して配列またはコレクションクラスに対してカスタム反復を実行するメソッド、getアクセサまたは演算子です

単純な数値イテレータの例

イテレータの一般的な使用例は、数値の集合に対して何らかの操作を実行することです。以下の例は、数字の配列内の各要素を個別にコンソールに出力する方法を示しています。

これは、配列がIEnumerableインターフェイスを実装し、クライアントがGetEnumerator()メソッドを使用して配列のイテレータを取得できるため可能GetEnumerator() 。このメソッドは列挙子を返します。この列挙子は、配列内の各番号に渡って読み取り専用の前方一致カーソルです。

int[] numbers = { 1, 2, 3, 4, 5 };

IEnumerator iterator = numbers.GetEnumerator();

while (iterator.MoveNext())
{
    Console.WriteLine(iterator.Current);
}

出力

1
2
3
4
5

foreach文を使用して同じ結果を得ることも可能です:

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

収量を使用したイテレータの作成

イテレータ列挙子を生成します。 C#では、列挙子は、 yieldステートメントを含むメソッド、プロパティ、またはインデクサを定義することによって生成されます。

ほとんどのメソッドは、通常のreturn文を使って呼び出し元に制御をreturnます。これとは対照的に、 yieldステートメントを使用するメソッドでは、要求があったときに複数の値を呼び出し元に返す一方で、それらの値を返す間にローカル状態を保持することができます。これらの戻り値はシーケンスを構成します。イテレータ内で使用されるyield文には2種類あります。

  • yield returnは呼び出し元に制御を返しますが、状態は保持します。コントロールがそれに戻されるとき、呼び出し先はこの行から実行を続けます。

  • yield breakは、通常のreturn文と同様に機能します。これは、シーケンスの終了を示します。通常のreturnステートメント自体はイテレーター・ブロック内では不正です。

以下の例は、 フィボナッチシーケンスを生成するために使用できるイテレータメソッドを示しています。

IEnumerable<int> Fibonacci(int count)
{
    int prev = 1;
    int curr = 1;
    
    for (int i = 0; i < count; i++)
    {
        yield return prev;
        int temp = prev + curr;
        prev = curr;
        curr = temp;
    }
}

次に、このイテレータを使用して、呼び出し元のメソッドによって消費されるフィボナッチシーケンスの列挙子を生成することができます。以下のコードは、フィボナッチシーケンス内の最初の10個の項をどのように列挙できるかを示しています。

void Main()
{
    foreach (int term in Fibonacci(10))
    {
        Console.WriteLine(term);
    }
}

出力

1
1
2
3
5
8
13
21
34
55


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow