猿问

比较C#中数组的最简单方法

在Java中,Arrays.equals()可以轻松比较两个基本数组的内容(所有基本类型都可以使用重载)。

C#中有这样的事情吗?有什么“神奇”的方法可以比较C#中两个数组的内容?


汪汪一只猫
浏览 1513回答 3
3回答

手掌心

您可以使用SequenceEqual。这适用于任何IEnumerable<T>数组,而不仅仅是数组。

慕田峪7331174

在LINQ中使用SequenceEqual。int[] arr1 = new int[] { 1,2,3};int[] arr2 = new int[] { 3,2,1 };Console.WriteLine(arr1.SequenceEqual(arr2)); // falseConsole.WriteLine(arr1.Reverse().SequenceEqual(arr2)); // true

牛魔王的故事

同样对于数组(和元组),您可以使用.NET 4.0中的新接口:IStructuralComparable和IStructuralEquatable。使用它们,您不仅可以检查数组的相等性,还可以比较它们。static class StructuralExtensions{&nbsp; &nbsp; public static bool StructuralEquals<T>(this T a, T b)&nbsp; &nbsp; &nbsp; &nbsp; where T : IStructuralEquatable&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return a.Equals(b, StructuralComparisons.StructuralEqualityComparer);&nbsp; &nbsp; }&nbsp; &nbsp; public static int StructuralCompare<T>(this T a, T b)&nbsp; &nbsp; &nbsp; &nbsp; where T : IStructuralComparable&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return a.CompareTo(b, StructuralComparisons.StructuralComparer);&nbsp; &nbsp; }}{&nbsp; &nbsp; var a = new[] { 1, 2, 3 };&nbsp; &nbsp; var b = new[] { 1, 2, 3 };&nbsp; &nbsp; Console.WriteLine(a.Equals(b)); // False&nbsp; &nbsp; Console.WriteLine(a.StructuralEquals(b)); // True}{&nbsp; &nbsp; var a = new[] { 1, 3, 3 };&nbsp; &nbsp; var b = new[] { 1, 2, 3 };&nbsp; &nbsp; Console.WriteLine(a.StructuralCompare(b)); // 1}
随时随地看视频慕课网APP
我要回答