>  기사  >  백엔드 개발  >  C#의 반복자

C#의 반복자

王林
王林원래의
2024-09-03 15:04:08565검색

Iterator는 요소를 검색하고 배열, 목록 등에서 하나씩 반복을 수행하는 데 사용되는 메서드입니다. Yield return 문은 iterator 메서드와 함께 사용되어 컬렉션의 요소를 반환하는 데 사용되며 Yield Break는 다음과 같이 사용됩니다. 반복을 중지합니다. 항상 현재 위치를 저장하고 다음 반복이 발생할 때 다음 요소를 반환합니다. IEnumerable 및 IEnumerator 개체 값은 Yield의 반환 유형입니다. 이번 주제에서는 C#의 Iterator에 대해 알아보겠습니다.

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 루프는 세 개의 문으로 구성됩니다. 먼저 초기화를 실행한 후 Boolean 표현식인 조건을 실행합니다. 그런 다음 반복자가 실행되어 초기화된 변수의 값을 변경합니다. 이 for 루프 과정은 조건이 false가 될 때까지 계속되며, false이면 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();
}
}
}
}

이 예에는 5개의 요소를 포함하는 요소 배열이 있으며 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 메소드가 사용됩니다. 여기서 목록은 7개의 요소로 구성됩니다. 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 메소드는 목록에 요소를 추가하는 데 사용됩니다. 여기 목록에는 7개의 요소가 포함되어 있습니다. MoveNext 및 Current가 사용됩니다. MoveNext는 기본적으로 다음 요소가 존재하는지 여부를 추적하고 요소가 사용 가능한 경우 true일 수 있는 부울을 반환하고 요소가 없는 경우 false를 반환합니다. 반면 현재 요소는 현재 요소를 검색하는 데 사용됩니다.

출력:

C#의 반복자

Iterator의 장점과 단점

장점과 단점은 아래와 같습니다

장점

  1. 반복자를 메서드로 사용하고 접근자를 가져올 수 있습니다.
  2. 연산자로 사용하거나 속성으로 사용할 수 있습니다.
  3. 반복자는 읽기 쉽고 구현하기 쉽습니다.
  4. 반복자는 일반 컬렉션과 비제네릭 컬렉션에 사용됩니다.

단점

  1. 목록 역추적에는 반복자가 유용하지 않습니다.
  2. 반복자는 위치를 저장하므로 반복된 구조를 업데이트할 수 없습니다.
  3. 정적 생성자, 정적 종료자 및 인스턴스 생성자에는 반복자를 사용하지 않습니다.

결론

따라서 값 시퀀스를 순회하기 위해 foreach 문과 함께 반복자를 사용할 수 있습니다. 요소를 반환하기 위해 반복자와 함께 Yield를 여러 번 사용할 수 있습니다. 구현하기 쉽고 매우 편리합니다.

위 내용은 C#의 반복자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.