サーチ…
備考
イテレータは、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