본문 바로가기
C#

[C#] 리스트 중복 요소 제거 (Distinct, LINQ)

by 코딩이라구 2023. 7. 17.

C#에서 리스트를 사용하면서 중복을 제거해야 할 경우가 종종 발생합니다. 이때 Disctinct() 함수를 사용함으로써, 중복된 값을 제거하고 고유한 값만을 가질 수 있습니다. 그럼 Distinct 함수에 대하여 알아보도록 하겠습니다.


C# 리스트 중복 요소 제거 - DISTINCT, LINQ

 

1. DISTINCT()

  • 리스트에서 중복 요소들을 제거하는 방법으로 Distinct 함수를 사용합니다. 이때 반환되는 값으로는 Enumerable 요소들을 반환하고, ToList()를 통하여 리스트로 변환하실 수 있습니다.
  • list.Distinct().ToList();

 

// 리스트의 중복된 요소들을 제거하는 예제
List<string> list = new List<string>();

list.Add("츠라구");
list.Add("김길동");
list.Add("박지운");
list.Add("츠라구");
list.Add("송명순");

// 중복 제거
list = list.Distinct().ToList();

foreach(string str in list)
{
	Console.WriteLine(str);
}

// 결과
츠라구
김길동
박지운
송명순

위와 같이 "츠라구"라는 중복된 요소를 제거한 결과를 확인하실 수 있습니다.


2. LINQ

  • Distinct와 같은 경우에는 단일 데이터(int, string, boolean 등)만을 중복 제거하는 데 사용하는 함수이며, 단일 데이터가 아닌 경우에는 중복값을 제거하기 위하여 LINQ를 사용해야 합니다.

 

// 단일 데이터가 아닌 리스트 중복 제거
// 구조체 선언
struct Example
{
    public Example(int n, string str)
    {
        age = n;
        name = str;
    }

    int age;
    string name;
};

// LINQ 사용
List<Example> list = new List<Example>();
            
list.Add(new Example(20, "츠라구"));
list.Add(new Example(19, "송명순"));
list.Add(new Example(20, "츠라구"));
list.Add(new Example(12, "박성준"));
list.Add(new Example(25, "박천우"));

List<Example> result = null;
var var_result = (from name in list select name).Distinct();
result = var_set.ToList();

foreach(Example ex in list)
{
	Console.WriteLine(string.Format("이름 : {0}, 나이 : {1}", ex.name, ex.age));
}

// 결과
이름 : 츠라구, 나이 : 20
이름 : 송명순, 나이 : 19
이름 : 박성준, 나이 : 12
이름 : 박천우, 나이 : 25

이번에는 C#에서 리스트에서 중복 요소를 제거하는 Distinct(), LINQ 두 가지 방법에 대하여 알아보았습니다. 단일 데이터가 아닐 때 많은 어려움이 있으셨던 분들께서는 LINQ의 사용이 많은 도움이 되셨으면 좋겠습니다.

 


MSDN 참고 자료 - https://learn.microsoft.com/en-us/dotnet/api/system.linq.enumerable.distinct?view=net-7.0 

 

Enumerable.Distinct Method (System.Linq)

Returns distinct elements from a sequence.

learn.microsoft.com

댓글