C#의 LINQ에서 Distinct() 메서드를 사용하면 컬렉션에 포함된 중복 요소를 손쉽게 제거하고 고유한(distinct) 값만 추출할 수 있습니다.
중복 요소가 있는 리스트 준비
먼저 중복된 값이 포함된 정수형 리스트를 하나 만들어 보겠습니다. 아래 리스트에는 5와 30이 각각 두 번씩 들어 있습니다.
List<int> points = new List<int> { 5, 10, 5, 20, 30, 30, 40, 50, 60, 70 };Distinct() 메서드로 중복 제거하기
리스트를 AsQueryable()로 변환한 뒤 Distinct() 메서드를 호출하면 중복이 제거된 결과를 얻을 수 있습니다.
points.AsQueryable().Distinct();
Distinct()는 기본적으로 요소의 기본 비교자(EqualityComparer)를 사용하여 중복 여부를 판단합니다. 반환 타입은 IEnumerable<T>이므로 foreach 문으로 간단히 순회할 수 있습니다.
전체 예제 코드
using System;
using System.Linq;
using System.Collections.Generic;
class Demo {
static void Main() {
List<int> points = new List<int> { 5, 10, 5, 20, 30, 30, 40, 50, 60, 70 };
// 리스트에서 고유한 요소만 추출
IEnumerable<int> res = points.AsQueryable().Distinct();
foreach (int a in res) {
Console.WriteLine(a);
}
}
}실행 결과
실행하면 중복된 5와 30이 한 번씩만 출력되는 것을 확인할 수 있습니다.
5 10 20 30 40 50 60 70
참고 사항
단순히 List<T>에서 중복을 제거하는 것이 목적이라면 AsQueryable() 없이 points.Distinct()처럼 바로 호출해도 동일하게 동작합니다. 또한 사용자 정의 클래스의 객체 목록에 대해 중복을 제거하려면 IEqualityComparer<T>를 구현하거나 익명 타입과 함께 사용하는 방법도 활용할 수 있습니다.