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

C#에서 두 개 이상의 리스트에서 공통 값 찾는 방법 – Intersect() 메서드 활용하기

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) 값만 포함됩니다.