241 votes

Meilleure façon de comparer les tableaux en C #

En Java, Arrays.equals () permet de comparer facilement le contenu de deux tableaux de base (des surcharges sont disponibles pour tous les types de base).

Existe-t-il une telle chose en C #? Existe-t-il un moyen "magique" de comparer le contenu de deux tableaux en C #?

339voto

Quartermeister Points 24729

Vous pouvez utiliser SequenceEqual . Cela fonctionne pour tous les IEnumerable<T> , pas seulement les tableaux.

105voto

John Buchanan Points 2093

Utilisez SequenceEqual dans 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
 

32voto

desco Points 12018

Pour les tableaux (et les nuplets), vous pouvez également utiliser les nouvelles interfaces de .NET 4.0: IStructuralComparable et IStructuralEquatable . En les utilisant, vous pouvez non seulement vérifier l’égalité des tableaux, mais aussi les comparer.

 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
}
 

0voto

Rezo Megrelidze Points 615

Voici une étrange implémentation.

     static bool ArraysEqual<T>(T[] a, T[] b)
    {
        int k = 0;
        return a.All(x => x.Equals(b[k++]));
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X