C# - 배열이 같은지 비교 (SequenceEqual)

두개의 배열이 모두 같은 요소를 갖고 있고, 동일한 순서로 저장되어있는지 비교하는 방법을 소개합니다.

1. SequenceEqual()으로 배열 비교

Enumerable.SequenceEqual(a, b)는 배열 a와 b의 요소들의 순서와 내용이 모두 같으면 true를 리턴합니다. 두 배열에 모두 동일한 요소가 저장되어있지만, 다른 순서로 저장되어있으면 false가 리턴됩니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            int[] arr1 = {1, 2, 3, 4, 5};
            int[] arr2 = {1, 2, 3, 4, 5};
            int[] arr3 = {5, 4, 3, 2, 1};

            bool result = Enumerable.SequenceEqual(arr1, arr2);
            Console.WriteLine("arr1 == arr2 ? " + result);

            result = Enumerable.SequenceEqual(arr1, arr3);
            Console.WriteLine("arr1 == arr3 ? " + result);
        }
    }
}

Output:

arr1 == arr2 ? True
arr1 == arr3 ? False

만약 arr1 객체가 null이 아니라면 아래와 같이 arr1.SequenceEqual(arr2) 처럼 직접 array에서 함수를 호출하여 다른 배열과 비교할 수 있습니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            int[] arr1 = {1, 2, 3, 4, 5};
            int[] arr2 = {1, 2, 3, 4, 5};
            int[] arr3 = {5, 4, 3, 2, 1};

            bool result = arr1.SequenceEqual(arr2);
            Console.WriteLine("arr1 == arr2 ? " + result);

            result = arr1.SequenceEqual(arr3);
            Console.WriteLine("arr1 == arr3 ? " + result);
        }
    }
}

Output:

arr1 == arr2 ? True
arr1 == arr3 ? False

2. 요소는 같지만, 순서가 다른 배열을 비교하는 방법

두개의 배열이 갖고 있는 요소들은 모두 동일한 요소를 갖고 있는데, 순서만 다를 때가 있습니다.

만약 순서는 무시하고 요소 값만 비교하여 같은지 비교하고 싶다면, 배열을 미리 정렬하고 SequenceEqual()로 같은지 비교할 수 있습니다.

아래 예제에서 사용된 array.OrderBy()는 배열을 정렬하는 함수이며, 어떤 것을 key로 사용하여 정렬할 것인지에 대한 함수를 인자로 전달해야 합니다. 아래 예제에서는 int 요소 자체를 key로 사용할 것이기 때문에 (a => a)로 전달하면 됩니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            int[] arr1 = {1, 2, 3, 4, 5};
            int[] arr2 = {1, 2, 3, 4, 5};
            int[] arr3 = {5, 4, 3, 2, 1};

            bool result = Enumerable.SequenceEqual(arr1.OrderBy(a => a), arr2.OrderBy(a => a));
            Console.WriteLine("arr1 == arr2 ? " + result);

            result = Enumerable.SequenceEqual(arr1.OrderBy(a => a), arr3.OrderBy(a => a));
            Console.WriteLine("arr1 == arr3 ? " + result);
        }
    }
}

Output:

arr1 == arr2 ? True
arr1 == arr3 ? True
Loading script...
codechachaCopyright ©2019 codechacha