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

C#에서 SortedSet을 반복하는 열거자(Enumerator) 가져오기

C#의 SortedSet<T> 컬렉션에 저장된 요소를 순서대로 하나씩 탐색하려면 GetEnumerator() 메서드를 사용하여 열거자(Enumerator)를 가져올 수 있습니다. 열거자는 컬렉션의 요소를 읽기 전용으로 앞뒤 없이 순차적으로 반복할 때 유용합니다.

열거자를 사용하는 일반적인 패턴은 다음과 같습니다.

  • GetEnumerator(): SortedSet의 요소를 반복하는 열거자를 반환합니다.
  • MoveNext(): 열거자를 다음 요소로 이동시키며, 더 이상 요소가 없으면 false를 반환합니다.
  • Current: 현재 위치의 요소 값을 가져옵니다.

예제 1: 문자열 SortedSet의 열거자 사용하기

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      SortedSet<string> set1 = new SortedSet<string>();
      set1.Add("AB");
      set1.Add("BC");
      set1.Add("CD");
      set1.Add("EF");

      Console.WriteLine("SortedSet1의 요소...");
      foreach (string res in set1) {
         Console.WriteLine(res);
      }

      SortedSet<string> set2 = new SortedSet<string>();
      set2.Add("BC");
      set2.Add("CD");
      set2.Add("DE");
      set2.Add("EF");
      set2.Add("AB");
      set2.Add("HI");
      set2.Add("JK");

      Console.WriteLine("SortedSet2의 요소 (열거자 사용)...");
      SortedSet<string>.Enumerator demoEnum = set2.GetEnumerator();

      while (demoEnum.MoveNext()) {
         string res = demoEnum.Current;
         Console.WriteLine(res);
      }
   }
}

출력 결과

SortedSet1의 요소...
AB
BC
CD
EF
SortedSet2의 요소 (열거자 사용)...
AB
BC
CD
DE
EF
HI
JK

위 예제에서 첫 번째 집합은 foreach 문으로 출력했고, 두 번째 집합은 명시적으로 GetEnumerator()를 호출하여 while 루프와 함께 사용했습니다. 두 방식 모두 내부적으로 동일한 열거 메커니즘을 사용하지만, 열거자를 직접 다루면 루프 흐름을 더 세밀하게 제어할 수 있다는 장점이 있습니다.

또한 주목할 점은 요소를 추가한 순서와 관계없이 항상 정렬된 순서(여기서는 사전순)로 출력된다는 것입니다. 이것이 SortedSet의 핵심 특징입니다.

예제 2: 정수형 SortedSet의 열거자 사용하기

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      SortedSet<int> set1 = new SortedSet<int>();
      set1.Add(100);
      set1.Add(200);
      set1.Add(300);
      set1.Add(400);
      set1.Add(500);
      set1.Add(600);
      set1.Add(700);

      Console.WriteLine("SortedSet의 요소 (열거자 사용)...");
      SortedSet<int>.Enumerator demoEnum = set1.GetEnumerator();

      while (demoEnum.MoveNext()) {
         int res = demoEnum.Current;
         Console.WriteLine(res);
      }
   }
}

출력 결과

SortedSet의 요소 (열거자 사용)...
100
200
300
400
500
600
700

정리

SortedSet의 열거자는 SortedSet<T>.Enumerator 구조체 타입으로 반환되며, 값 타입이므로 박싱(boxing)이 발생하지 않아 성능 면에서도 효율적입니다. 단, 열거자는 생성 시점의 컬렉션 상태를 기준으로 동작하므로, 열거 도중 컬렉션이 수정되면 InvalidOperationException이 발생할 수 있다는 점에 유의해야 합니다.