Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 두 리스트의 교집합 구하는 방법 – Intersect() 메서드 완벽 가이드

C#에서 두 리스트(List)의 교집합, 즉 공통 요소를 찾고 싶다면 Intersect() 메서드를 사용하는 것이 가장 간단하고 효율적인 방법입니다. Intersect()는 LINQ에서 제공하는 집합 연산 메서드로, 두 컬렉션에 모두 존재하는 요소만 추출해 줍니다.

예제 리스트 살펴보기

먼저 교집합을 구할 두 개의 정수형 리스트를 만들어 보겠습니다.

첫 번째 리스트

List<int> list1 = new List<int>();
list1.Add(2);
list1.Add(3);
list1.Add(5);
list1.Add(7);

두 번째 리스트

List<int> list2 = new List<int>();
list2.Add(5);
list2.Add(4);
list2.Add(6);
list2.Add(8);

위 두 리스트를 비교하면, 양쪽에 모두 포함된 값은 5 하나뿐입니다. 따라서 교집합 결과는 5가 되어야 합니다.

전체 예제 코드

아래는 Intersect() 메서드를 활용해 두 리스트의 교집합을 구하고, 그 개수를 출력하는 전체 C# 프로그램입니다.

using System;
using System.Collections.Generic;
using System.Linq;

namespace Demo {
    public class Program {
        public static void Main(String[] args) {
            // 첫 번째 리스트 생성
            List<int> list1 = new List<int>();
            list1.Add(2);
            list1.Add(3);
            list1.Add(5);
            list1.Add(7);
            Console.WriteLine(list1.Count);

            // 두 번째 리스트 생성
            List<int> list2 = new List<int>();
            list2.Add(5);
            list2.Add(4);
            list2.Add(6);
            list2.Add(8);
            Console.WriteLine(list2.Count);

            // 두 리스트의 교집합 구하기
            List<int> common = list1.Intersect(list2).ToList();
            Console.WriteLine(common.Count);
        }
    }
}

실행 결과

4
4
1

결과 분석

출력 결과를 순서대로 해석하면 다음과 같습니다.

  • 4 – 첫 번째 리스트(list1)의 요소 개수
  • 4 – 두 번째 리스트(list2)의 요소 개수
  • 1 – 교집합(common)의 요소 개수, 즉 두 리스트에 공통으로 존재하는 값은 5 하나뿐입니다.

Intersect() 메서드의 특징

Intersect() 메서드를 사용할 때 몇 가지 알아두면 좋은 점이 있습니다.

  • LINQ 네임스페이스 필요: Intersect()는 System.Linq 네임스페이스에 정의된 확장 메서드이므로 반드시 using System.Linq;를 추가해야 합니다.
  • 중복 제거: 교집합 결과에는 중복 값이 자동으로 제거되어 고유한(unique) 요소만 반환됩니다.
  • 지연 실행(Lazy Evaluation): Intersect() 자체는 즉시 실행되지 않으며, ToList()나 foreach와 같은 열거 작업이 수행될 때 실제로 계산됩니다.
  • 기본 비교 방식: 기본적으로 해당 타입의 기본 같음 비교자(EqualityComparer)를 사용하며, 필요하다면 사용자 지정 비교자를 인자로 전달할 수도 있습니다.

이처럼 Intersect() 메서드를 활용하면 복잡한 반복문 없이 단 한 줄의 코드로 두 리스트의 교집합을 손쉽게 구할 수 있습니다.