イテレータは、配列やリストなどで要素を取得し、反復を 1 つずつ実行するために使用されるメソッドです。 yield return ステートメントは、コレクションの要素を返すために iterator メソッドとともに使用され、yield Break は、コレクションの要素を返すために使用されます。反復を停止します。常に現在の位置を保存し、次の反復が行われるときに次の要素を返します。 IEnumerable および IEnumerator オブジェクトの値は、yield の戻り値の型です。このトピックでは、C# のイテレータについて学びます。
以下は、ループ、foreach ループ、列挙子などのさまざまなメソッドを使用した反復を示す例です。
例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main(string[] args) { for (int i = 1; i <= 7; i++) { Console.WriteLine( i); } Console.WriteLine("Press Enter Key to Exit.."); Console.ReadLine(); } } }
for ループは 3 つのステートメントで構成されます。最初に初期化が実行され、次にブール式である条件が実行されます。その後、イテレータが実行されて、初期化された変数の値が変更されます。この for ループのプロセスは条件が false になるまで継続され、条件が false になると for ループは終了します。
出力:
例:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main(string[]args) { string[] values = new string[3] { "John", "Bob", "Eva" }; foreach (string name in values) { Console.WriteLine(name); } Console.WriteLine("Press Enter Key to Exit.."); Console.ReadLine(); } } }
キーワード内の foreach ループは、項目を反復するために使用されます。キーワードは、各反復で項目を選択するために使用されます。最初の項目は反復され、2 番目の項目以降の要素に格納されます。 foreach の反復回数は、コレクション内の要素の数によって異なります。この例では、コレクションは 3 つの値で構成されているため、foreach が 3 回実行され、値が表示されます。
出力:
例 #1
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static IEnumerable<string> GetArray() { int[] array = new int[] { 12, 45, 56, 21, 4 }; // initializing array elements foreach (var element in array) // iterating array element { yield return element.ToString(); // returning elements } } public static void Main(string[]args) // main method { IEnumerable<string> elements = GetArray(); // storing array element foreach(var element in elements) { Console.WriteLine(element); Console.ReadKey(); } } } }
この例では、5 つの要素を含む要素の配列があり、各要素の反復に foreach が使用されます。 yield ステートメントは、各反復後に要素を返すために使用されます。 IEnumerable インターフェイスは各要素を格納しますが、foreach は反復から返された要素を表示するために使用されます。このイテレータはメソッドで使用されます。
出力:
例 2
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static IEnumerable<string> GetList() { List<string> list = new List<string>(); list.Add("Sunday"); // adding elements to list list.Add("Monday"); list.Add("Tuesday"); list.Add("Wednesday"); list.Add("Thursday"); list.Add("Friday"); list.Add("Saturday"); foreach(var element in list) //iteration of list elements { yield return element; //returning elements after iteration } } public static void Main(string[]args) // main method { IEnumerable<string> elements = GetList(); // storing elements foreach(var element in elements) { Console.WriteLine(element); Console.ReadKey(); } } } }
この例では、リスト コレクションが使用され、リストに要素を追加するために list.add メソッドが使用されます。ここでのリストは 7 つの要素で構成されています。 foreach は各要素の反復に使用されます。 yield ステートメントは、各反復後に要素を返すために使用されます。 IEnumerable インターフェイスは各要素を格納しますが、foreach は反復から返された要素を表示するために使用されます。
出力:
例 #3
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { public static void Main(string[] args) { foreach(var item in fib(6)) // iteration of elements { Console.WriteLine(item); } } public static IEnumerable<int> fib(int number) { int x = 0, y = 1; // yield return x; //yield return y; for (int i=0; i<=number; i++) { int temp = x; x = y; y = temp + y; yield return y; // returning the element Console.ReadKey(); } } } }
この例では、フィボナッチ数列が生成され、演算子で反復子が使用されます。これの実装は、メソッドでイテレータを使用したのと同じですが、この演算子ではものを返すために使用されます。
出力:
例 #4
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Iterators { class Iterator { static void Main() { List<int> list = new List<int>(); list.Add(10); // adding elements to list list.Add(20); list.Add(30); list.Add(40); list.Add(50); list.Add(60); list.Add(70); List<int>.Enumerator a = list.GetEnumerator(); Write(a); } static void Write(IEnumerator<int> a) { while (a.MoveNext()) { int value = a.Current; Console.WriteLine(value); Console.ReadKey(); } } } }
上記の例ではリストコレクションを使用しています。 List.add メソッドは、リストに要素を追加するために使用されます。ここのリストには 7 つの要素が含まれています。 MoveNext と Current が使用されます。 MoveNext は基本的に次の要素が存在するかどうかを追跡し、要素が利用可能な場合は true、要素がない場合は false となるブール値を返しますが、現在の要素を取得するために current が使用されます。
出力:
メリットとデメリットについては以下で説明します
値のシーケンスを走査するには、foreach ステートメントで反復子を使用できます。 Yield はイテレータとともに複数回使用して要素を返すことができます。実装は簡単で非常に便利です。
以上がC# のイテレータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。