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

C# LINQ Distinct() 메서드 – 리스트에서 중복 요소 제거하기

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>를 구현하거나 익명 타입과 함께 사용하는 방법도 활용할 수 있습니다.