Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Iterator dalam C#

Iterator dalam C#

王林
王林asal
2024-09-03 15:04:08720semak imbas

Iterators ialah kaedah yang digunakan untuk mendapatkan semula elemen dan melakukan lelaran satu demi satu dalam tatasusunan, senarai, dll. Pernyataan pulangan hasil digunakan dengan kaedah iterator untuk mengembalikan elemen koleksi dan pemisah hasil digunakan untuk hentikan lelaran. Ia sentiasa menyimpan lokasi semasa dan mengembalikan elemen seterusnya apabila lelaran seterusnya berlaku. Nilai objek IEnumerable dan IEnumerator ialah jenis hasil pulangan. Dalam topik ini, kita akan belajar tentang Iterators dalam C#.

Kaedah Iterators C#

Di bawah ialah contoh untuk menunjukkan lelaran dengan pelbagai kaedah seperti gelung, gelung foreach dan pembanci.

1. Untuk Gelung

Contoh:

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

Gelung A untuk terdiri daripada tiga pernyataan. Pada mulanya, pemulaan dilaksanakan dan kemudian syarat yang merupakan ungkapan Boolean. Selepas iterator itu dilaksanakan untuk menukar nilai pembolehubah yang dimulakan. Proses gelung for ini berterusan sehingga keadaan palsu dan apabila palsu, gelung for ditamatkan.

Output:

Iterator dalam C#

2. ForEach Gelung

Contoh:

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

Gelung foreach bersama dalam kata kunci digunakan untuk mengulang item. Kata kunci digunakan untuk memilih item pada setiap lelaran. Item pertama diulang dan disimpan dalam elemen selepas item kedua itu dan seterusnya. Bilangan lelaran foreach bergantung pada bilangan elemen dalam koleksi. Dalam contoh ini, koleksi terdiri daripada tiga nilai jadi bilangan foreach akan berlaku tiga kali dan memaparkan nilai.

Output:

Iterator dalam C#

3. Enumerator

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

Dalam contoh ini, terdapat tatasusunan elemen yang mengandungi lima elemen dan foreach digunakan untuk lelaran setiap elemen. Pernyataan hasil digunakan untuk mengembalikan elemen selepas setiap lelaran. Antara muka IEnumerable menyimpan setiap elemen manakala foreach digunakan untuk memaparkan elemen pulangan daripada lelaran. Iterator ini digunakan dalam kaedah.

Output:

Iterator dalam C#

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

Dalam contoh ini, koleksi senarai digunakan dan kaedah senarai.tambah digunakan untuk menambah elemen dalam senarai. Di sini senarai itu terdiri daripada tujuh elemen. Foreach digunakan untuk lelaran setiap elemen. Pernyataan hasil digunakan untuk mengembalikan elemen selepas setiap lelaran. Antara muka IEnumerable menyimpan setiap elemen manakala foreach digunakan untuk memaparkan elemen pulangan daripada lelaran.

Output:

Iterator dalam C#

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

Dalam contoh ini, siri Fibonacci dijana dan lelaran digunakan dalam pengendali. Pelaksanaan ini sama seperti kami menggunakan iterator dalam kaedah kecuali dalam operator ini digunakan untuk mengembalikan sesuatu.

Output:

Iterator dalam C#

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

Dalam contoh di atas, koleksi senarai digunakan. Kaedah senarai.tambah digunakan untuk menambah elemen dalam senarai. Senarai di sini mengandungi tujuh elemen. MoveNext dan Current digunakan. MoveNext pada asasnya menjejak jika elemen seterusnya ada atau tidak dan mengembalikan boolean yang mungkin benar jika elemen tersedia dan palsu jika tiada elemen manakala arus digunakan untuk mendapatkan semula elemen semasa.

Output:

Iterator dalam C#

Kebaikan dan Keburukan Iterator

Kebaikan & keburukan diterangkan di bawah

Kelebihan

  1. Iterators boleh digunakan sebagai kaedah dan mendapatkan aksesor.
  2. Ia boleh digunakan sebagai pengendali atau sebagai harta.
  3. Iterators mudah dibaca dan mudah dilaksanakan.
  4. Iterators digunakan dengan koleksi generik dan bukan generik.

Keburukan

  1. Iterators tidak berguna dalam menjejak ke belakang senarai.
  2. Sebagai iterator menyimpan kedudukan supaya anda tidak boleh mengemas kini struktur yang diulang.
  3. Iterators tidak digunakan dalam pembina statik, pemuktamad statik dan pembina contoh.

Kesimpulan

Jadi untuk melintasi urutan nilai, iterator boleh digunakan dengan pernyataan foreach. Hasil boleh digunakan beberapa kali dengan iterator untuk mengembalikan elemen. Ia mudah untuk dilaksanakan dan agak berguna.

Atas ialah kandungan terperinci Iterator dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:nhibernate dalam C#Artikel seterusnya:nhibernate dalam C#