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

C#에서 HashSet과 특정 컬렉션 간의 공통 요소 존재 여부 확인하기

C#에서 HashSet과 지정된 컬렉션 사이에 공통 요소가 하나라도 존재하는지 확인하려면 Overlaps() 메서드를 사용합니다. 이 메서드는 두 집합이 최소한 하나 이상의 동일한 요소를 공유하고 있으면 true를, 그렇지 않으면 false를 반환합니다.

Overlaps() 메서드란?

HashSet<T>.Overlaps(IEnumerable<T> other) 메서드는 현재 HashSet 객체와 매개변수로 전달된 컬렉션 사이에 교집합이 존재하는지 판별합니다. 전체 교집합을 계산하지 않고 공통 요소 발견 즉시 결과를 반환하므로 성능 면에서도 효율적입니다.

예제 1: 정수형 HashSet 비교

다음 예제에서는 두 개의 정수형 HashSet을 만들고 서로 공통 요소를 가지고 있는지 확인합니다.

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main(){
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(25);
      set1.Add(50);
      set1.Add(75);
      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(100);
      set2.Add(150);
      set2.Add(200);
      set2.Add(250);

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

      Console.WriteLine("공통 요소가 존재합니까? " + set1.Overlaps(set2));
   }
}

실행 결과

HashSet1의 요소
25
50
75
100
125
150
HashSet2의 요소
30
60
100
150
200
250
공통 요소가 존재합니까? True

위 결과에서 볼 수 있듯이 두 HashSet은 100150이라는 공통 요소를 가지고 있으므로 Overlaps() 메서드는 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("Nathan");
      set1.Add("Tim");
      set1.Add("Tom");
      set1.Add("Jack");
      set1.Add("Steve");
      set1.Add("David");

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

      HashSet<String> set2 = new HashSet<String>();
      set2.Add("Tom");
      set2.Add("Jack");
      set2.Add("Kevin");

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

      Console.WriteLine("공통 요소가 존재합니까? " + set1.Overlaps(set2));
   }
}

실행 결과

HashSet1의 요소
Nathan
Tim
Tom
Jack
Steve
David
HashSet2의 요소
Tom
Jack
Kevin
공통 요소가 존재합니까? True

두 번째 예제에서도 TomJack이라는 공통 요소가 존재하기 때문에 결과는 True입니다.

정리

C#에서 HashSet과 다른 컬렉션 간의 공통 요소 존재 여부를 확인할 때는 Overlaps() 메서드가 가장 간단하고 효율적인 방법입니다. 불리언 값만 필요한 상황에서 교집합을 직접 구현하는 것보다 코드가 훨씬 간결해지며, 내부적으로 조기 종료(early exit) 방식으로 동작하여 대용량 데이터에서도 빠른 성능을 보장합니다.