C#에서는 IsSupersetOf() 메서드를 사용하여 특정 HashSet이 지정된 컬렉션의 상위 집합(superset)인지 여부를 간단하게 확인할 수 있습니다. 이 메서드는 해당 HashSet이 전달된 컬렉션의 모든 요소를 포함하고 있으면 true를, 하나라도 빠져 있다면 false를 반환합니다.
예제 1
다음은 두 개의 HashSet을 만들고, set1이 set2의 상위 집합인지 확인하는 예제입니다.
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("AB");
set1.Add("IJ");
set1.Add("KL");
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("HashSet1의 요소");
foreach(string val in set1){
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("EF");
set2.Add("KL");
Console.WriteLine("HashSet2의 요소");
foreach(string val in set2){
Console.WriteLine(val);
}
Console.WriteLine("set1은 set2의 상위 집합인가? " + set1.IsSupersetOf(set2));
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
HashSet1의 요소 AB CD EF IJ KL OP HashSet2의 요소 EF KL set1은 set2의 상위 집합인가? True
첫 번째 예제에서는 set1에 set2의 모든 요소(EF, KL)가 포함되어 있으므로 true가 반환됩니다. 참고로 HashSet은 중복된 값을 허용하지 않기 때문에 "AB"와 "EF"를 여러 번 추가해도 한 번만 저장됩니다.
예제 2
이번에는 상위 집합이 아닌 경우를 살펴보겠습니다. set2에 set1에 존재하지 않는 요소(MN, QR)가 포함되어 있으므로 결과는 false가 됩니다.
using System;
using System.Collections.Generic;
public class Demo {
public static void Main(){
HashSet<string> set1 = new HashSet<string>();
set1.Add("IJ");
set1.Add("KL");
set1.Add("EF");
set1.Add("OP");
Console.WriteLine("HashSet1의 요소");
foreach(string val in set1){
Console.WriteLine(val);
}
HashSet<string> set2 = new HashSet<string>();
set2.Add("KL");
set2.Add("MN");
set2.Add("OP");
set2.Add("QR");
Console.WriteLine("HashSet2의 요소");
foreach(string val in set2){
Console.WriteLine(val);
}
Console.WriteLine("set1은 set2의 상위 집합인가? " + set1.IsSupersetOf(set2));
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
HashSet1의 요소 IJ KL EF OP HashSet2의 요소 KL MN OP QR set1은 set2의 상위 집합인가? False
정리
IsSupersetOf() 메서드는 집합 간 포함 관계를 검증할 때 매우 유용합니다. 상위 집합 여부뿐만 아니라 IsSubsetOf()(부분 집합 여부), IsProperSupersetOf()(진부분 상위 집합 여부) 등의 관련 메서드들도 함께 활용하면 다양한 집합 연산을 손쉽게 처리할 수 있습니다.