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() 메서드는 데이터 목록에서 중복을 걸러내야 하는 다양한 상황에서 유용하게 활용할 수 있습니다.