C#에서 두 개 이상의 리스트(List) 사이에 존재하는 공통 값을 찾고 싶다면, LINQ에서 제공하는 Intersect() 메서드를 활용하면 됩니다. 이 메서드는 두 컬렉션을 비교하여 양쪽 모두에 포함된 요소만 추려서 반환해 줍니다.
1. 리스트 생성하기
먼저 공통 값을 비교할 두 개의 리스트를 만들어 보겠습니다.
// 두 개의 리스트 선언
var list1 = new List<int>{3, 4};
var list2 = new List<int>{1, 2, 3};위 코드에서 list1은 3과 4를, list2는 1, 2, 3을 담고 있습니다.
2. Intersect() 메서드로 공통 값 구하기
이제 Intersect() 메서드를 호출하면 두 리스트에 모두 존재하는 값만 손쉽게 얻을 수 있습니다.
var res = list1.Intersect(list2);
Intersect()는 집합 연산(set operation) 중 하나로, 결과 역시 IEnumerable<int> 형태로 반환되므로 foreach 문으로 순회하며 출력할 수 있습니다.
전체 예제 코드
아래는 지금까지 설명한 내용을 하나로 합친 완성된 코드입니다.
using System.Collections.Generic;
using System.Linq;
using System;
public class Demo {
public static void Main() {
// 두 개의 리스트 선언
var list1 = new List<int>{3, 4};
var list2 = new List<int>{1, 2, 3};
// 공통 값 구하기
var res = list1.Intersect(list2);
foreach(int i in res) {
Console.WriteLine(i);
}
}
}실행 결과
3
실행 결과를 보면 두 리스트에 공통으로 포함된 값인 3만 출력된 것을 확인할 수 있습니다.
참고 사항
Intersect()는 기본적으로 기본 같음 비교자(default equality comparer)를 사용하므로, 문자열 비교 시 대소문자가 다르면 다른 값으로 취급됩니다.- 사용자 정의 클래스 객체를 비교하려면
IEqualityComparer<T>를 직접 구현해 두 번째 인자로 전달해야 합니다. - 결과에는 중복이 제거된 고유한(unique) 값만 포함됩니다.