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

C# Except 메서드로 두 리스트의 차이 값 찾기

C#에서 두 개의 리스트(List)를 비교하여 한쪽에만 존재하는 값을 찾고 싶다면 LINQ의 Except 메서드를 활용하면 됩니다. 이 메서드는 첫 번째 리스트에는 있지만 두 번째 리스트에는 없는 요소들을 반환합니다.

리스트 준비하기

먼저 비교할 두 개의 문자열 리스트를 생성합니다.

첫 번째 리스트:

List<string> list1 = new List<string>();
list1.Add("P");
list1.Add("Q");
list1.Add("R");
list1.Add("S");
list1.Add("T");
list1.Add("U");
list1.Add("V");
list1.Add("W");

두 번째 리스트:

List<string> list2 = new List<string>();
list2.Add("T");
list2.Add("U");
list2.Add("V");
list2.Add("W");

Except 메서드란?

Except는 System.Linq 네임스페이스에 포함된 집합 연산자로, 첫 번째 컬렉션 기준으로 두 번째 컬렉션에 없는 고유한 값들만 추출합니다. 즉, 두 리스트 간의 차집합을 구하는 것과 같습니다.

전체 예제 코드

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

public class Demo {
   public static void Main() {
      // 첫 번째 리스트 생성
      List<string> list1 = new List<string>();
      list1.Add("P");
      list1.Add("Q");
      list1.Add("R");
      list1.Add("S");
      list1.Add("T");
      list1.Add("U");
      list1.Add("V");
      list1.Add("W");

      Console.WriteLine("첫 번째 리스트...");
      foreach(string value in list1) {
         Console.WriteLine(value);
      }

      // 두 번째 리스트 생성
      Console.WriteLine("두 번째 리스트...");
      List<string> list2 = new List<string>();
      list2.Add("T");
      list2.Add("U");
      list2.Add("V");
      list2.Add("W");

      foreach(string value in list2) {
         Console.WriteLine(value);
      }

      // 차이 값 구하기
      Console.WriteLine("남은 값들...");
      IEnumerable<string> list3;
      list3 = list1.Except(list2);

      foreach(string value in list3) {
         Console.WriteLine(value);
      }
   }
}

실행 결과

첫 번째 리스트...
P
Q
R
S
T
U
V
W
두 번째 리스트...
T
U
V
W
남은 값들...
P
Q
R
S

정리

위 예제에서 볼 수 있듯이, list1.Except(list2)를 호출하면 두 번째 리스트(T, U, V, W)에는 없는 P, Q, R, S만 결과로 반환됩니다. 참고로 Except 메서드는 기본적으로 중복된 값을 제거하고 고유한 값만 반환하므로, 중복 데이터를 다룰 때도 유용하게 활용할 수 있습니다.