Самый простой способ сравнить массивы в C #

Это зависит от какой платформы.

В GCC это довольно тривиально, см. этот пост для более подробной информации.

В MSVC вы можете использовать библиотеку StackWalker который обрабатывает все базовые вызовы API, необходимые для Windows.

Вам нужно будет найти лучший способ интегрировать эту функциональность в ваше приложение, но количество кода, которое вам нужно написать, должно быть минимальным.

142
задан Peter Mortensen 28 June 2015 в 23:30
поделиться

3 ответа

Вы можете использовать SequenceEqual . Это работает для любого IEnumerable , а не только для массивов.

228
ответ дан 23 November 2019 в 22:19
поделиться

Используйте SequenceEqual в LINQ .

int[] arr1 = new int[] { 1,2,3};
int[] arr2 = new int[] { 3,2,1 };

Console.WriteLine(arr1.SequenceEqual(arr2)); // false
Console.WriteLine(arr1.Reverse().SequenceEqual(arr2)); // true
60
ответ дан 23 November 2019 в 22:19
поделиться

Также для массивов (и кортежей) вы можете использовать новые интерфейсы из .NET 4.0: IStructuralComparable and IStructuralEquatable. С их помощью можно не только проверять равенство массивов, но и сравнивать их.

static class StructuralExtensions
{
    public static bool StructuralEquals<T>(this T a, T b)
        where T : IStructuralEquatable
    {
        return a.Equals(b, StructuralComparisons.StructuralEqualityComparer);
    }

    public static int StructuralCompare<T>(this T a, T b)
        where T : IStructuralComparable
    {
        return a.CompareTo(b, StructuralComparisons.StructuralComparer);
    }
}

{
    var a = new[] { 1, 2, 3 };
    var b = new[] { 1, 2, 3 };
    Console.WriteLine(a.Equals(b)); // False
    Console.WriteLine(a.StructuralEquals(b)); // True
}
{
    var a = new[] { 1, 3, 3 };
    var b = new[] { 1, 2, 3 };
    Console.WriteLine(a.StructuralCompare(b)); // 1
}
28
ответ дан 23 November 2019 в 22:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: