Iterator는 요소를 검색하고 배열, 목록 등에서 하나씩 반복을 수행하는 데 사용되는 메서드입니다. Yield return 문은 iterator 메서드와 함께 사용되어 컬렉션의 요소를 반환하는 데 사용되며 Yield Break는 다음과 같이 사용됩니다. 반복을 중지합니다. 항상 현재 위치를 저장하고 다음 반복이 발생할 때 다음 요소를 반환합니다. IEnumerable 및 IEnumerator 개체 값은 Yield의 반환 유형입니다. 이번 주제에서는 C#의 Iterator에 대해 알아보겠습니다.
다음은 루프, 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 루프는 세 개의 문으로 구성됩니다. 먼저 초기화를 실행한 후 Boolean 표현식인 조건을 실행합니다. 그런 다음 반복자가 실행되어 초기화된 변수의 값을 변경합니다. 이 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 루프는 항목을 반복하는 데 사용됩니다. 키워드는 각 반복에서 항목을 선택하는 데 사용됩니다. 첫 번째 항목은 반복되어 두 번째 항목 이후의 요소에 저장됩니다. 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(); } } } }
이 예에는 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를 반환합니다. 반면 현재 요소는 현재 요소를 검색하는 데 사용됩니다.
출력:
장점과 단점은 아래와 같습니다
따라서 값 시퀀스를 순회하기 위해 foreach 문과 함께 반복자를 사용할 수 있습니다. 요소를 반환하기 위해 반복자와 함께 Yield를 여러 번 사용할 수 있습니다. 구현하기 쉽고 매우 편리합니다.
위 내용은 C#의 반복자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!