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

C#에서 HashSet이 지정된 컬렉션의 진상위 집합(Proper Superset)인지 확인하는 방법

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이 발생하므로 주의가 필요합니다.