C# 프로그래밍에서 두 개의 리스트(List)에 공통으로 포함된 요소, 즉 교집합을 구해야 하는 경우가 자주 있습니다. 이럴 때 LINQ에서 제공하는 Intersect() 메서드를 사용하면 아주 간단하게 처리할 수 있습니다.
1. 두 개의 리스트 준비하기
먼저 비교할 두 개의 정수형 리스트를 생성합니다.
List<int> val1 = new List<int> { 25, 30, 40, 60, 80, 95, 110 };
List<int> val2 = new List<int> { 27, 35, 40, 75, 95, 100, 110 };2. Intersect() 메서드로 교집합 구하기
Intersect() 메서드는 System.Linq 네임스페이스에 포함된 확장 메서드로, 두 컬렉션에 모두 존재하는 고유한 요소들만 반환합니다. AsQueryable()과 함께 사용하면 다음과 같이 작성할 수 있습니다.
IEnumerable<int> res = val1.AsQueryable().Intersect(val2);
3. 전체 예제 코드
아래는 위 내용을 하나로 묶은 완전한 예제 코드입니다.
using System;
using System.Collections.Generic;
using System.Linq;
class Demo {
static void Main() {
List<int> val1 = new List<int> { 25, 30, 40, 60, 80, 95, 110 };
List<int> val2 = new List<int> { 27, 35, 40, 75, 95, 100, 110 };
IEnumerable<int> res = val1.AsQueryable().Intersect(val2);
Console.WriteLine("두 리스트의 교집합...");
foreach (int a in res) {
Console.WriteLine(a);
}
}
}4. 실행 결과
프로그램을 실행하면 두 리스트에 공통으로 포함된 값들이 출력됩니다.
두 리스트의 교집합... 40 95 110
참고 사항
Intersect()는 기본적으로 기본 형식(int, string 등)에는 기본 동등 비교자(Default Equality Comparer)를 사용합니다.- 결과에는 중복 요소가 포함되지 않으며, 첫 번째 리스트의 순서를 따릅니다.
- 사용자 정의 클래스 객체를 비교하려면
IEqualityComparer<T>를 직접 구현하여 인자로 전달해야 합니다.