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 메서드는 기본적으로 중복된 값을 제거하고 고유한 값만 반환하므로, 중복 데이터를 다룰 때도 유용하게 활용할 수 있습니다.