C#에서 SortedSet<T>는 요소가 항상 정렬된 상태로 유지되는 고유한 값들의 컬렉션입니다. SortedSet과 다른 컬렉션 간의 합집합(Union)을 계산하려면 UnionWith() 메서드를 사용하면 됩니다. 이 메서드는 현재 SortedSet 객체를 직접 수정하여, 인자로 전달된 컬렉션의 모든 요소를 병합합니다. 중복 요소는 자동으로 제거되며, 결과는 언제나 오름차순으로 정렬됩니다.
UnionWith 메서드 기본 문법
set1.UnionWith(set2);
위 코드는 set2의 모든 요소를 set1에 병합하여, set1 자체가 합집합의 결과를 담게 됩니다. 반환값은 없으며(void), 원본 집합이 변경된다는 점에 유의해야 합니다.
예제 1: 서로 다른 두 집합의 합집합
두 개의 SortedSet을 생성한 뒤 UnionWith()로 합집합을 구하는 전체 예제입니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
SortedSet<int> set1 = new SortedSet<int>();
set1.Add(50);
set1.Add(100);
set1.Add(150);
Console.WriteLine("SortedSet1 elements...");
foreach(int ele in set1) {
Console.WriteLine(ele);
}
SortedSet<int> set2 = new SortedSet<int>();
set2.Add(100);
set2.Add(150);
set2.Add(200);
set2.Add(250);
Console.WriteLine("SortedSet2 elements...");
foreach(int ele in set2) {
Console.WriteLine(ele);
}
Console.WriteLine("Union...");
set1.UnionWith(set2);
foreach(int ele in set1) {
Console.WriteLine(ele);
}
}
}
출력 결과
SortedSet1 elements... 50 100 150 SortedSet2 elements... 100 150 200 250 Union... 50 100 150 200 250
실행 결과를 보면 set1에 없던 200과 250이 새로 추가되었습니다. 두 집합에 공통으로 존재하는 100과 150은 중복 없이 한 번만 포함되며, 최종 결과는 항상 정렬된 순서로 출력됩니다.
예제 2: 동일한 요소를 가진 두 집합의 합집합
이번에는 두 집합이 완전히 같은 경우를 살펴보겠습니다.
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);
Console.WriteLine("SortedSet1 elements...");
foreach(int ele in set1) {
Console.WriteLine(ele);
}
SortedSet<int> set2 = new SortedSet<int>();
set2.Add(100);
set2.Add(200);
set2.Add(300);
set2.Add(400);
set2.Add(500);
set2.Add(600);
Console.WriteLine("SortedSet2 elements...");
foreach(int ele in set2) {
Console.WriteLine(ele);
}
Console.WriteLine("Union...");
set1.UnionWith(set2);
foreach(int ele in set1) {
Console.WriteLine(ele);
}
}
}
출력 결과
SortedSet1 elements... 100 200 300 400 500 600 SortedSet2 elements... 100 200 300 400 500 600 Union... 100 200 300 400 500 600
두 집합의 요소가 완전히 동일하기 때문에 합집합 연산 후에도 set1의 내용에는 아무런 변화가 없습니다. 이처럼 UnionWith()는 이미 존재하는 요소에 대해 아무 작업도 수행하지 않습니다.
핵심 정리
- UnionWith(IEnumerable<T>): 현재 집합을 수정하여 지정된 컬렉션과의 합집합 결과를 저장합니다.
- 중복된 요소는 자동으로 제거되며, 각 요소는 한 번만 저장됩니다.
- SortedSet의 특성상 결과는 항상 오름차순으로 정렬됩니다.
- 메서드 호출 시 원본 집합(set1)이 직접 변경되므로, 원본을 보존해야 한다면 미리 복사본을 만들어 사용하는 것이 좋습니다.