Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# Queue.GetEnumerator() 메서드 완벽 정리 – 큐를 순회하는 열거자 사용법

C#의 Queue.GetEnumerator() 메서드는 큐(Queue)에 저장된 요소들을 처음부터 끝까지 순회할 수 있는 열거자(enumerator)를 반환합니다. 이 메서드를 활용하면 foreach 문이나 while 문을 통해 큐의 각 요소에 순차적으로 접근할 수 있습니다.

구문(Syntax)

Queue.GetEnumerator() 메서드의 기본 구문은 다음과 같습니다.

public virtual System.Collections.IEnumerator GetEnumerator ();

사용 예제 1

다음은 GetEnumerator() 메서드를 사용해 두 개의 큐를 생성하고, 각 큐의 요소를 열거자로 순회하며 출력한 뒤 두 큐가 같은지 비교하는 예제입니다.

using System;
using System.Collections;
public class Demo {
    public static void Main(){
        Queue queue = new Queue();
        queue.Enqueue(100);
        queue.Enqueue(200);
        queue.Enqueue(300);
        queue.Enqueue(400);
        Console.WriteLine("Queue1...");
        IEnumerator demoEnum = queue.GetEnumerator();
        while (demoEnum.MoveNext()){
            Console.WriteLine(demoEnum.Current);
        }
        Queue queue2 = new Queue();
        queue2.Enqueue(100);
        queue2.Enqueue(150);
        queue2.Enqueue(300);
        queue2.Enqueue(400);
        Console.WriteLine("\nQueue2...");
        demoEnum = queue2.GetEnumerator();
        while (demoEnum.MoveNext()){
            Console.WriteLine(demoEnum.Current);
        }
        Console.WriteLine(queue.Equals(queue2));
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Queue1...
100
200
300
400
Queue2...
100
150
300
400
False

두 큐는 일부 요소가 서로 다르기 때문에 Equals() 비교 결과 False가 반환된 것을 확인할 수 있습니다.

사용 예제 2

이번에는 더 많은 요소를 가진 큐를 만들고, GetEnumerator() 메서드로 전체 요소를 순회하는 예제입니다.

using System;
using System.Collections;
public class Demo {
    public static void Main(){
        Queue queue = new Queue();
        queue.Enqueue(100);
        queue.Enqueue(200);
        queue.Enqueue(300);
        queue.Enqueue(400);
        queue.Enqueue(500);
        queue.Enqueue(600);
        queue.Enqueue(700);
        queue.Enqueue(800);
        queue.Enqueue(900);
        queue.Enqueue(1000);
        Console.WriteLine("Queue...");
        IEnumerator demoEnum = queue.GetEnumerator();
        while (demoEnum.MoveNext()){
            Console.WriteLine(demoEnum.Current);
        }
    }
}

실행 결과

위 코드를 실행하면 아래와 같이 큐에 저장된 모든 요소가 FIFO(선입선출) 순서대로 출력됩니다.

Queue...
100
200
300
400
500
600
700
800
900
1000

핵심 포인트 정리

- GetEnumerator()는 큐의 요소를 순회하는 IEnumerator 객체를 반환합니다.
- MoveNext() 메서드는 다음 요소로 이동하며, 더 이상 요소가 없으면 false를 반환합니다.
- Current 속성으로 현재 위치의 요소 값에 접근할 수 있습니다.
- 열거자는 큐의 요소를 읽기만 하며, 순회 중에는 원본 데이터가 변경되지 않습니다.