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

C#에서 두 리스트가 같은지 비교하는 방법

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()을 사용하는 것이 효과적입니다.