迭代器是用於在陣列、列表等中檢索元素並進行逐一迭代的方法。 yield return語句與迭代器方法一起使用,傳回集合中的元素,yieldbreak用來停止迭代。它始終存儲當前位置並在下一次迭代發生時返回下一個元素。 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 迴圈由三個語句組成。首先執行初始化,然後執行條件(布林表達式)。之後執行迭代器來更改初始化變數的值。這個for迴圈過程一直持續到條件為假為止,當條件為假時,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 迴圈用於迭代項目。關鍵字用於在每次迭代中選擇項目。第一項被迭代並儲存在第二項之後的元素中,依此類推。 foreach 的迭代次數取決於集合中元素的數量。在此範例中,集合由三個值組成,因此 foreach 的次數將發生三次並顯示值。
輸出:
範例#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(); } } } }
在這個例子中,有一個包含五個元素的元素數組,並且使用 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方法在清單中加入元素。這裡的清單由七個元素組成。 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方法用於在清單中新增元素。這裡的清單包含七個元素。使用 MoveNext 和 Current。 MoveNext 基本上是追蹤下一個元素是否存在並傳回布林值,如果該元素可用則傳回 true,如果沒有元素則傳回 false,而 current 用於檢索目前元素。
輸出:
優點和缺點解釋如下
因此,要遍歷值序列,可以將迭代器與 foreach 語句結合使用。 Yield 可以與迭代器一起使用多次來傳回元素。它很容易實現並且非常方便。
以上是C# 中的迭代器的詳細內容。更多資訊請關注PHP中文網其他相關文章!