C#에서 두 배열의 교집합(공통 요소)을 구하는 가장 간단한 방법은 LINQ의 Intersect 메서드를 사용하는 것입니다. 이 메서드는 System.Linq 네임스페이스에 정의된 확장 메서드로, 두 컬렉션에서 공통으로 포함된 요소들만 추출하여 반환합니다.
Intersect 메서드란?
Intersect는 집합 연산 중 하나로, 두 시퀀스를 비교해 양쪽 모두에 존재하는 요소만 골라냅니다. 반환되는 결과에는 다음과 같은 특징이 있습니다.
- 두 배열에 공통으로 있는 요소만 반환됩니다.
- 결과에는 중복 요소가 자동으로 제거됩니다.
- 기본적으로 해당 타입의 기본 같음 비교자(Default Equality Comparer)를 사용합니다.
기본 사용 예제
먼저 교집합을 구할 두 개의 배열을 준비합니다.
int[] arr1 = { 44, 76, 98, 34 };
int[] arr2 = { 24, 98, 44, 55, 47, 86 };이제 Intersect 메서드를 호출하여 두 배열의 교집합을 구합니다.
var intersect = arr1.Intersect(arr2);
전체 코드 예제
다음은 위 내용을 하나로 합친 전체 실행 코드입니다.
using System;
using System.Linq;
class Program {
static void Main() {
int[] arr1 = { 44, 76, 98, 34 };
int[] arr2 = { 24, 98, 44, 55, 47, 86 };
var intersect = arr1.Intersect(arr2);
foreach (int res in intersect) {
Console.WriteLine(res);
}
}
}실행 결과
위 코드를 실행하면 두 배열에 모두 포함된 값인 44와 98이 출력됩니다.
44 98
추가 팁: 문자열 배열의 교집합
문자열 배열을 비교할 때는 대소문자 처리에 주의해야 합니다. 대소문자를 구분하지 않고 비교하려면 StringComparer.OrdinalIgnoreCase를 두 번째 인수로 전달하면 됩니다.
string[] fruits1 = { "Apple", "Banana", "Cherry" };
string[] fruits2 = { "apple", "cherry", "Mango" };
var result = fruits1.Intersect(fruits2, StringComparer.OrdinalIgnoreCase);
// 결과: Apple, Cherry또한 Intersect는 지연 실행(Lazy Evaluation) 방식으로 동작하므로, 실제로 결과를 순회할 때(예: foreach) 연산이 수행된다는 점도 기억해 두면 좋습니다.