C#에서 HashSet<T>.IsProperSupersetOf() 메서드는 현재 HashSet 객체가 지정된 컬렉션의 진상위 집합(proper superset)인지 여부를 확인하는 데 사용됩니다.
진상위 집합이란 두 집합이 완전히 동일하지 않으면서, 현재 집합이 다른 컬렉션의 모든 요소를 포함하고 추가로 자신만의 요소도 가지고 있어야 함을 의미합니다. 즉, set1이 set2보다 요소가 더 많고 set2의 모든 요소를 포함할 때 true를 반환하며, 두 집합이 같은 경우에는 false를 반환한다는 점에서 단순 상위 집합(superset) 검사와 차이가 있습니다.
예제 1: 정수형 HashSet 비교
다음은 HashSet이 지정된 컬렉션의 진상위 집합인지 확인하는 예제입니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
HashSet<int> set1 = new HashSet<int>();
set1.Add(30);
set1.Add(60);
set1.Add(70);
set1.Add(80);
set1.Add(100);
set1.Add(125);
set1.Add(150);
set1.Add(200);
Console.WriteLine("Elements in HashSet1");
foreach(int val in set1) {
Console.WriteLine(val);
}
HashSet<int> set2 = new HashSet<int>();
set2.Add(30);
set2.Add(60);
set2.Add(70);
Console.WriteLine("Elements in HashSet2");
foreach(int val in set2) {
Console.WriteLine(val);
}
Console.WriteLine("Is set1 a proper superset of set2? " + set1.IsProperSupersetOf(set2));
}
}
실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Elements in HashSet1 30 60 70 80 100 125 150 200 Elements in HashSet2 30 60 70 Is set1 a proper superset of set2? True
set1은 set2의 모든 요소(30, 60, 70)를 포함하면서 더 많은 요소를 가지고 있으므로, True가 반환되었습니다.
예제 2: 문자열 HashSet 비교
이번에는 문자열 타입의 HashSet으로 동일한 메서드를 활용해 보겠습니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
HashSet<string> set1 = new HashSet<string>();
set1.Add("AB");
set1.Add("CD");
set1.Add("EF");
set1.Add("GH");
set1.Add("IJ");
set1.Add("KL");
set1.Add("MN");
set1.Add("OP");
Console.WriteLine("Elements in HashSet1");
foreach(string val in set1) {
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("EF");
set2.Add("KL");
Console.WriteLine("Elements in HashSet2");
foreach(string val in set2) {
Console.WriteLine(val);
}
Console.WriteLine("Is set1 a proper superset of set2? " + set1.IsProperSupersetOf(set2));
}
}
실행 결과
위 코드를 실행하면 아래와 같은 결과가 출력됩니다.
Elements in HashSet1 AB CD EF GH IJ KL MN OP Elements in HashSet2 EF KL Is set1 a proper superset of set2? True
set2의 모든 요소(EF, KL)가 set1에 포함되어 있고, set1은 set2에 없는 추가 요소들을 가지고 있기 때문에 역시 True가 반환됩니다.
정리
- IsProperSupersetOf(IEnumerable<T>): 현재 HashSet이 지정된 컬렉션의 진상위 집합이면 true, 그렇지 않으면 false를 반환합니다.
- 두 집합의 내용이 완전히 동일한 경우에는 false를 반환하므로, '같거나 큰 집합'을 확인하려면 대신 IsSupersetOf() 메서드를 사용해야 합니다.
- 매개변수로 전달되는 컬렉션이 null이면 ArgumentNullException이 발생하므로 주의가 필요합니다.