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

C# HashSet의 IsProperSubsetOf 메서드로 진부분집합 여부 확인하는 방법

C#에서 HashSet<T>가 지정된 컬렉션의 진부분집합(proper subset)인지 확인하려면 IsProperSubsetOf 메서드를 사용하면 됩니다.

진부분집합이란 한 집합이 다른 집합에 완전히 포함되면서도, 두 집합이 서로 같지 않은 경우를 의미합니다. 즉, 부분집합이면서 상대 집합보다 원소 개수가 적어야 합니다.

IsProperSubsetOf 메서드란?

HashSet<T>.IsProperSubsetOf(IEnumerable<T> other) 메서드는 현재 HashSet 객체가 매개변수로 전달된 컬렉션의 진부분집합이면 true를, 그렇지 않으면 false를 반환합니다.

예제 1: 진부분집합인 경우

다음 예제에서는 두 개의 HashSet을 만들고, set1이 set2의 진부분집합인지 확인합니다.

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(70);
      set1.Add(100);
      set1.Add(125);
      set1.Add(150);

      Console.WriteLine("HashSet1의 요소");
      foreach(int val in set1) {
         Console.WriteLine(val);
      }

      HashSet<int> set2 = new HashSet<int>();
      set2.Add(30);
      set2.Add(60);
      set2.Add(70);
      set2.Add(80);
      set2.Add(100);
      set2.Add(125);
      set2.Add(150);
      set2.Add(200);

      Console.WriteLine("HashSet2의 요소");
      foreach(int val in set2) {
         Console.WriteLine(val);
      }

      Console.WriteLine("set1은 set2의 진부분집합인가? " + set1.IsProperSubsetOf(set2));
   }
}

실행 결과

HashSet1의 요소
70
100
125
150
HashSet2의 요소
30
60
70
80
100
125
150
200
set1은 set2의 진부분집합인가? True

set1의 모든 요소(70, 100, 125, 150)가 set2에 포함되어 있고, set1의 요소 수가 set2보다 적으므로 결과는 True입니다.

예제 2: 진부분집합이 아닌 경우

이번에는 set1에 set2에 없는 요소를 포함시켜 결과를 비교해 보겠습니다.

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(10);
      set1.Add(20);

      Console.WriteLine("HashSet1의 요소");
      foreach(int val in set1) {
         Console.WriteLine(val);
      }

      HashSet<int> set2 = new HashSet<int>();
      set2.Add(30);
      set2.Add(60);
      set2.Add(70);
      set2.Add(80);
      set2.Add(100);
      set2.Add(125);
      set2.Add(150);
      set2.Add(200);

      Console.WriteLine("HashSet2의 요소");
      foreach(int val in set2) {
         Console.WriteLine(val);
      }

      Console.WriteLine("set1은 set2의 진부분집합인가? " + set1.IsProperSubsetOf(set2));
   }
}

실행 결과

HashSet1의 요소
10
20
HashSet2의 요소
30
60
70
80
100
125
150
200
set1은 set2의 진부분집합인가? False

이 경우 set1의 요소인 10과 20이 set2에는 존재하지 않기 때문에, set1은 set2의 부분집합이 될 수 없습니다. 따라서 결과는 False입니다.

정리

  • IsProperSubsetOf는 현재 집합이 대상 컬렉션의 진부분집합인지 판별합니다.
  • 모든 요소가 대상 컬렉션에 포함되고, 요소 수가 더 적으면 true를 반환합니다.
  • 대상 컬렉션에 없는 요소가 하나라도 있거나 두 집합이 완전히 같으면 false를 반환합니다.