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

C#으로 시퀀스에서 고유한 요소만 추출하는 방법 (Distinct 메서드 활용)

C#에서 리스트나 배열과 같은 시퀀스에 포함된 중복 값을 제거하고 고유한(distinct) 요소만 추출하는 방법을 알아보겠습니다. LINQ에서 제공하는 Distinct() 메서드를 사용하면 단 몇 줄의 코드로 간단하게 처리할 수 있습니다.

1단계: 시퀀스 생성 및 요소 추가

먼저 정수형 List<int>를 생성하고 여러 개의 요소를 추가합니다. 이때 의도적으로 중복된 값인 120과 111을 포함시켰습니다.

List<int> ID = new List<int> { 120, 111, 250, 111, 120, 300, 399, 450 };

2단계: Distinct() 메서드로 고유한 요소 추출

AsQueryable() 메서드로 시퀀스를 변환한 뒤 Distinct()를 호출하면, 중복이 제거된 요소들이 IEnumerable<int> 형태로 반환됩니다.

IEnumerable<int> res = ID.AsQueryable().Distinct();

전체 예제 코드

지금까지의 내용을 하나로 합친 완성된 코드입니다.

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

class Demo {
    static void Main() {
        // 중복 요소를 포함한 리스트 생성
        List<int> ID = new List<int> { 120, 111, 250, 111, 120, 300, 399, 450 };

        // 고유한(distinct) 요소만 추출
        IEnumerable<int> res = ID.AsQueryable().Distinct();

        foreach (int arr in res) {
            Console.WriteLine(arr);
        }
    }
}

실행 결과

120
111
250
300
399
450

코드 설명

위 출력 결과를 보면 원래 8개였던 요소가 중복 제거 후 6개로 줄어든 것을 확인할 수 있습니다. Distinct() 메서드의 주요 특징은 다음과 같습니다.

  • 기본 비교자 사용: 별도의 비교 로직 없이 기본 동등 비교자(default equality comparer)를 통해 요소의 동일성을 판단합니다.
  • 순서 유지: 각 요소가 처음 등장한 순서대로 결과를 반환합니다.
  • 지연 실행(lazy evaluation): 실제로 열거(foreach 등)될 때 연산이 수행되므로 효율적입니다.

이처럼 Distinct() 메서드는 데이터 목록에서 중복을 걸러내야 하는 다양한 상황에서 유용하게 활용할 수 있습니다.