C#의 LINQ에서는 컬렉션을 집합처럼 다룰 수 있도록 Union(합집합), Intersect(교집합), Except(차집합) 세 가지 집합 연산자를 제공합니다. 이 연산자들을 활용하면 여러 컬렉션 간의 관계를 손쉽게 처리할 수 있습니다.
Union — 합집합
Union은 두 개 이상의 컬렉션을 하나로 합치되, 중복된 요소는 제거하고 고유한(unique) 요소만 포함하는 결과 컬렉션을 반환합니다.
Intersect — 교집합
Intersect는 두 입력 시퀀스에 모두 공통으로 존재하는 요소들만 반환합니다. 즉, 양쪽 컬렉션에 동시에 있는 값들만 추출됩니다.
Except — 차집합
Except는 첫 번째 입력 시퀀스에는 존재하지만 두 번째 입력 시퀀스에는 없는 요소들만 반환합니다. 즉, 첫 번째 컬렉션에서 두 번째 컬렉션의 요소들을 제외한 결과입니다.
예제 코드
아래 예제에서는 두 개의 정수 배열을 대상으로 세 가지 연산자를 모두 사용해 보고 그 결과를 확인합니다.
class Program{
static void Main(){
int[] count1 = { 1, 2, 3, 4 };
int[] count2 = { 2, 4, 7 };
var resultUnion = count1.Union(count2);
var resultIntersect = count1.Intersect(count2);
var resultExcept = count1.Except(count2);
System.Console.WriteLine("Union");
foreach (var item in resultUnion){
Console.WriteLine(item);
}
System.Console.WriteLine("Intersect");
foreach (var item in resultIntersect){
Console.WriteLine(item);
}
System.Console.WriteLine("Except");
foreach (var item in resultExcept){
Console.WriteLine(item);
}
Console.ReadKey();
}
}실행 결과
Union 1 2 3 4 7 Intersect 2 4 Except 1 3
결과 해석
- Union: {1, 2, 3, 4}와 {2, 4, 7}을 합친 후 중복인 2와 4가 한 번씩만 출력되어 1, 2, 3, 4, 7이 됩니다.
- Intersect: 두 배열에 공통으로 있는 2와 4만 반환됩니다.
- Except: count1에는 있지만 count2에는 없는 1과 3이 반환됩니다.
이처럼 LINQ의 집합 연산자를 사용하면 반복문과 조건문 없이도 간결하고 가독성 높은 코드로 컬렉션 간의 데이터 비교 및 병합 작업을 수행할 수 있습니다.