C#에서 두 개의 리스트(List)가 동일한지 확인하는 대표적인 방법은 LINQ의 Except() 메서드를 활용하는 것입니다. Except()는 첫 번째 리스트에는 있지만 두 번째 리스트에는 없는 요소, 즉 차집합을 반환합니다. 따라서 그 결과로 하나라도 요소가 반환된다면 두 리스트는 같지 않다고 판단할 수 있습니다.
비교에 사용할 두 개의 리스트 준비하기
첫 번째 리스트
List<string> list1 = new List<string>();
list1.Add("A");
list1.Add("B");
list1.Add("C");
list1.Add("D");
두 번째 리스트
List<string> list2 = new List<string>();
list2.Add("C");
list2.Add("D");
위와 같이 리스트를 구성한 뒤, Except() 메서드를 호출했을 때 서로 다른 요소가 결과로 반환되면 두 리스트가 동일하지 않다는 의미입니다.
전체 예제 코드
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");
Console.WriteLine("첫 번째 리스트...");
foreach(string value in list1) {
Console.WriteLine(value);
}
Console.WriteLine("두 번째 리스트...");
List<string> list2 = new List<string>();
list2.Add("P");
list2.Add("R");
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 두 번째 리스트... P R 두 리스트의 차이... Q
실행 결과를 보면 첫 번째 리스트에만 존재하는 요소 "Q"가 출력됩니다. 이는 두 리스트 사이에 차이가 있다는 뜻이며, 따라서 두 리스트는 서로 같지 않습니다.
참고: 완전 일치 여부는 SequenceEqual()로 확인
요소의 개수뿐 아니라 순서까지 포함해 두 리스트가 완전히 동일한지 확인하려면 SequenceEqual() 메서드를 사용하는 것이 더 직관적입니다. 이 메서드는 두 시퀀스의 길이, 순서, 요소가 모두 일치할 때 true를 반환하고, 그렇지 않으면 false를 반환합니다.
bool isEqual = list1.SequenceEqual(list2); Console.WriteLine(isEqual); // 요소와 순서가 모두 같으면 True 출력
정리하면, 단순히 두 리스트 간의 차이를 찾으려면 Except()를, 완전한 동등성 검사를 하려면 SequenceEqual()을 사용하는 것이 효과적입니다.