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

C# Queryable SequenceEqual() 메서드로 두 시퀀스 동등성 비교하기

C#에서 두 시퀀스가 서로 같은지 확인하려면 SequenceEqual() 메서드를 사용합니다. 이 메서드는 두 시퀀스의 요소 개수와 각 요소의 순서 및 값이 모두 일치하는 경우 true를 반환하고, 그렇지 않으면 false를 반환합니다.

시퀀스 설정하기

먼저 비교할 두 개의 시퀀스(리스트)를 준비합니다. 아래 예제에서는 동일한 Employee 객체들을 포함하는 두 리스트를 생성합니다.

Employee emp1 = new Employee { EmployeeRank = 4, EmpName = "Amit", EmpMarks = 90 };
Employee emp2 = new Employee { EmployeeRank = 5, EmpName = "Raman", EmpMarks = 95 };
List<Employee> employee1 = new List<Employee> { emp1, emp2 };
List<Employee> employee2 = new List<Employee> { emp1, emp2 };

SequenceEqual()로 시퀀스 비교하기

이제 AsQueryable()을 호출해 시퀀스를 IQueryable 형태로 변환한 뒤, SequenceEqual() 메서드로 두 시퀀스가 동일한지 확인합니다.

employee1.AsQueryable().SequenceEqual(employee2);

두 리스트는 같은 객체 참조를 같은 순서로 담고 있으므로 결과는 true가 됩니다.

전체 예제

using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
   public static void Main() {
      Employee emp1 = new Employee { EmployeeRank = 4, EmpName = "Amit", EmpMarks = 90 };
      Employee emp2 = new Employee { EmployeeRank = 5, EmpName = "Raman", EmpMarks = 95 };
      List<Employee> employee1 = new List<Employee> { emp1, emp2 };
      List<Employee> employee2 = new List<Employee> { emp1, emp2 };
      bool res = employee1.AsQueryable().SequenceEqual(employee2);
      Console.WriteLine("Lists are equal? = "+res);
   }
}

public class Employee {
   public int EmployeeRank { get; set; }
   public string EmpName { get; set; }
   public int EmpMarks { get; set; }
}

실행 결과

Lists are equal? = True

참고 사항

SequenceEqual()은 기본적으로 요소의 참조 또는 기본 등호 비교를 사용합니다. 사용자 정의 클래스의 경우 속성 값을 기준으로 비교하려면 IEqualityComparer<T>를 구현하여 두 번째 인자로 전달하거나, 레코드(record) 타입을 활용하는 것이 좋습니다. 또한 요소의 순서까지 고려하기 때문에 순서가 다른 시퀀스는 내용이 같아도 false를 반환한다는 점에 유의해야 합니다.