C# SortedSet이란?
SortedSet<T>는 System.Collections.Generic 네임스페이스에 포함된 컬렉션 클래스로, 요소가 항상 정렬된 상태로 유지되고 중복 값을 허용하지 않는 집합 자료구조입니다. 요소를 추가하는 즉시 자동으로 오름차순 정렬되기 때문에, 정렬된 고유 값 목록이 필요할 때 매우 유용하게 사용됩니다.
아래 두 가지 예제를 통해 C#에서 SortedSet을 생성하고 활용하는 방법을 단계별로 살펴보겠습니다.
예제 1: 문자열 SortedSet 생성 및 열거자(Enumerator)로 순회하기
다음 코드는 SortedSet을 생성하고 요소를 추가한 뒤, foreach 문과 GetEnumerator() 메서드를 사용해 요소를 출력하는 과정을 보여줍니다. set2에는 무작위 순서로 요소를 추가했지만 출력 결과는 항상 정렬된 순서로 표시되는 점에 주목하세요.
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
예제 2: RemoveWhere()로 조건에 맞는 요소 제거하기
RemoveWhere() 메서드는 지정한 조건(술어)을 만족하는 모든 요소를 한 번에 제거할 수 있는 강력한 기능입니다. 다음 예제에서는 10으로 나누어떨어지는 요소들을 일괄 삭제합니다.
using System;
using System.Collections.Generic;
public class Demo {
private static bool demo(int i){
return ((i % 10) == 0);
}
public static void Main(String[] args){
SortedSet<int> set1 = new SortedSet<int>();
set1.Add(200);
set1.Add(215);
set1.Add(310);
set1.Add(500);
set1.Add(600);
Console.WriteLine("SortedSet 요소...");
foreach (int i in set1){
Console.WriteLine(i);
}
Console.WriteLine(" ");
set1.RemoveWhere(demo);
Console.WriteLine("일부 요소 제거 후 SortedSet...");
foreach (int i in set1){
Console.WriteLine(i);
}
}
}
출력 결과
실행 결과는 다음과 같습니다.
SortedSet 요소... 200 215 310 500 600 일부 요소 제거 후 SortedSet... 215
핵심 정리
- SortedSet은 요소를 자동으로 오름차순 정렬하며 중복을 허용하지 않습니다.
- Add() 메서드로 요소를 추가하고, foreach 또는 GetEnumerator()로 순회할 수 있습니다.
- RemoveWhere()를 사용하면 특정 조건을 만족하는 요소를 한 번에 제거할 수 있습니다.