C#의 Union 메서드는 LINQ에서 제공하는 집합 연산자 중 하나로, 두 개의 시퀀스(리스트)를 병합하면서 중복된 요소를 제거하고 고유한(unique) 요소만 반환합니다. 이 메서드는 수학의 합집합 개념과 동일하게 작동합니다.
Union 메서드의 기본 개념
Union 메서드는 기본 비교자(Default Equality Comparer)를 사용하여 요소를 비교하며, 두 리스트에 공통으로 존재하는 중복 값은 한 번만 결과에 포함됩니다.
먼저 예제에 사용할 두 개의 리스트를 선언해 보겠습니다.
var list1 = new List<int>{12, 65, 88, 45};
var list2 = new List<int>{40, 34, 65};위 두 리스트에는 숫자 65가 양쪽 모두에 포함되어 있습니다. Union 메서드를 적용하면 이 중복 값은 하나로 합쳐집니다.
이제 두 리스트의 합집합을 구해 보겠습니다.
var res = list1.Union(list2);
전체 예제 코드
다음은 Union 메서드를 실제로 사용하는 완전한 C# 프로그램입니다.
using System.Collections.Generic;
using System.Linq;
using System;
public class Demo {
public static void Main() {
// 두 개의 리스트 생성
var list1 = new List<int>{12, 65, 88, 45};
var list2 = new List<int>{40, 34, 65};
// 합집합 구하기
var res = list1.Union(list2);
foreach(int i in res) {
Console.WriteLine(i);
}
}
}실행 결과
12 65 88 45 40 34
결과 분석
출력 결과를 보면 첫 번째 리스트의 요소(12, 65, 88, 45)가 먼저 출력되고, 이어서 두 번째 리스트의 고유한 요소(40, 34)가 추가됩니다. 두 리스트에 모두 있던 65는 단 한 번만 출력되었는데, 이것이 바로 Union 메서드의 중복 제거 기능입니다.
참고 사항
- Union 메서드를 사용하려면
System.Linq네임스페이스를 참조해야 합니다. - 지연 실행(Lazy Evaluation) 방식으로 작동하므로, foreach 루프 등으로 열거할 때 실제 연산이 수행됩니다.
- 사용자 정의 클래스 객체를 다룰 때는
IEqualityComparer<T>를 매개변수로 전달하여 사용자 지정 비교 로직을 적용할 수 있습니다. - 중복을 허용하고 단순히 두 리스트를 연결하고 싶다면
Concat메서드를 대신 사용하세요.