首頁  >  文章  >  後端開發  >  C# 中的迭代器

C# 中的迭代器

王林
王林原創
2024-09-03 15:04:08714瀏覽

迭代器是用於在陣列、列表等中檢索元素並進行逐一迭代的方法。 yield return語句與迭代器方法一起使用,傳回集合中的元素,yieldbreak用來停止迭代。它始終存儲當前位置並在下一次迭代發生時返回下一個元素。 IEnumerable 和 IEnumerator 物件值是yield 的回傳類型。在本主題中,我們將學習 C# 中的迭代器。

C# 迭代器方法

下面的範例展示了使用循環、foreach 循環和枚舉器等各種方法進行迭代。

1. 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)
{
for (int i = 1; i <= 7; i++)
{
Console.WriteLine( i);
}
Console.WriteLine("Press Enter Key to Exit..");
Console.ReadLine();
}
}
}

for 迴圈由三個語句組成。首先執行初始化,然後執行條件(布林表達式)。之後執行迭代器來更改初始化變數的值。這個for迴圈過程一直持續到條件為假為止,當條件為假時,for迴圈終止。

輸出:

C# 中的迭代器

2. 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)
{
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 的次數將發生三次並顯示值。

輸出:

C# 中的迭代器

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();
}
}
}
}

在這個例子中,有一個包含五個元素的元素數組,並且使用 foreach 來迭代每個元素。 Yield 語句用於在每次迭代後傳回元素。 IEnumerable 介面儲存每個元素,而 foreach 用於顯示迭代返回的元素。該迭代器在方法中使用。

輸出:

C# 中的迭代器

範例 #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 用於顯示迭代返回的元素。

輸出:

C# 中的迭代器

範例 #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();
}
}
}
}

在此範例中,產生斐波那契數列並在運算子中使用迭代器。其實作與我們在方法中使用迭代器相同,只是在此運算符中用於返回內容。

輸出:

C# 中的迭代器

範例#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 用於檢索目前元素。

輸出:

C# 中的迭代器

迭代器的優點和缺點

優點和缺點解釋如下

優點

  1. 迭代器可以用作方法和 get 存取器。
  2. 它可以用作運算符或屬性。
  3. 迭代器易於閱讀且易於實現。
  4. 迭代器與泛型和非泛型集合一起使用。

缺點

  1. 迭代器在列表回溯中沒有用。
  2. 由於迭代器儲存位置,因此您無法更新迭代結構。
  3. 靜態建構子、靜態終結器和實例建構子中不使用迭代器。

結論

因此,要遍歷值序列,可以將迭代器與 foreach 語句結合使用。 Yield 可以與迭代器一起使用多次來傳回元素。它很容易實現並且非常方便。

以上是C# 中的迭代器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:C# 中的休眠下一篇:C# 中的休眠