ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 배열이 동일한지 비교
    C# 2024. 4. 1. 00:24

    배열이 동일한지 비교하는 방법은 크게 3가지가 있다.

    일단 하나는 반복문을 통해서 각각의 배열이 동일 인덱스에 동일한 요소를 가지고 있는지 확인하는 방법이다...

    이 방법은 매우 번거롭다.

     

    다른 방법으로는 Equals와 SequenceEqual 메서드를 사용하는 방법이 있다.

     

    • Object.Equals(Object?)

    두 오브젝트가 같은 값을 가지는지 boolean을 반환하여 알려준다. null값을 가지더라도 비교할 수 있다.

     

     

    그런데 Equals는 배열에 사용하면 이상한점을 발견할 수 있다.

     

     

    분명 두 배열의 모든 요소가 같은데 False를 반환한다.

     

    사실 Equals를 참조형식 자료형에 사용하면, 두 변수가 같은 값을 참조하고 있는지 검사한다.

     

     

    arr3에 arr를 참조 복사 했더니 Equals가 True를 반환하는 모습이다.

     

    그럼 그냥 같은 요소를 가지는 배열이 같음을 비교하는 방법은 없을까?

     

     

    • IEnumerable.SequenceEqual(IEnumerable)

    두 시퀀스가 서로 같은지 비교하여 boolean을 반환해준다.

     

     

    배열이 참조 복사된 것이든, 다른 배열이든 요소가 같으면 True를 반환해준다.

     

    그러나 SequenceEqual도 각 요소의 참조가 다르면 False를 반환할 수 있다. 

    뭔 말이냐 하면, 클래스의 인스턴스 같은 것을 담는 배열끼리 SequenceEqual로 비교한다고 했을 때, 각 인덱스의 요소가서로 다른 객체면 False를 반환한다는 것이다. 이는 아래에서 더 자세히 설명해주고 있다.

     

    https://learn.microsoft.com/ko-kr/dotnet/api/system.linq.enumerable.sequenceequal?view=net-8.0

     

     

    'C#' 카테고리의 다른 글

    2024.03.15 - IEnumerable, IEumerator  (0) 2024.03.14
    2024.03.13 - LinkedList  (0) 2024.03.14
    2024.03.13 - List  (0) 2024.03.13
    2024.03.12 - this, this 생성자  (0) 2024.03.12
    2024.03.12 - 큐(Queue)  (0) 2024.03.12
Designed by Tistory.