C#에서 두 리스트의 공통 요소 찾기
두 개의 컬렉션에서 서로 겹치는 값을 추출해야 하는 경우가 종종 있습니다. C#에서는 LINQ의 Intersect 메서드를 사용하면 아주 간단하게 처리할 수 있습니다. 이 메서드는 두 시퀀스에 모두 포함된 요소, 즉 수학의 '교집합'에 해당하는 값들을 반환합니다.
1단계: 비교할 두 개의 리스트 생성
먼저 공통 요소를 찾을 두 개의 리스트를 만듭니다.
List<int> list1 = new List<int>() {40, 20, 60, 3, 55};
List<int> list2 = new List<int>() {20, 70, 55, 80};2단계: Intersect 메서드로 공통 요소 추출
공통 요소를 찾으려면 다음과 같이 Intersect 메서드를 호출합니다.
list1.Intersect(list2)
Intersect는 System.Linq 네임스페이스에 정의된 확장 메서드로, 두 컬렉션의 교집합을 지연 실행(lazy evaluation) 방식으로 반환합니다. 결과에는 중복 요소가 자동으로 제거되며, 첫 번째 시퀀스의 요소 순서가 그대로 유지된다는 점도 기억해 두면 좋습니다.
전체 예제 코드
using System;
using System.Linq;
using System.Collections.Generic;
namespace Demo {
class Program {
static void Main(string[] args) {
List<int> list1 = new List<int>() {40, 20, 60, 3, 55};
List<int> list2 = new List<int>() {20, 70, 55, 80};
Console.WriteLine("Common elements:");
foreach(int value in list1.Intersect(list2))
Console.WriteLine(value);
}
}
}
실행 결과
Common elements:
20
55
위 코드를 실행하면 두 리스트에 모두 존재하는 값인 20과 55만 출력되는 것을 확인할 수 있습니다. 한 가지 주의할 점은 Intersect 메서드를 사용하려면 코드 상단에 반드시 using System.Linq; 구문을 추가해야 한다는 것입니다. 이처럼 LINQ를 활용하면 복잡한 반복문 없이도 컬렉션 간의 집합 연산을 몇 줄의 코드로 깔끔하게 처리할 수 있습니다.