0

试图比较 2 个数组但没有让它工作

            Console.WriteLine("Entering elements for ths 1st array: ");
        int[] arr1 = new int[3];
        for (int i = 0; i < arr1.Length; i++)
        {
            arr1[i] = Convert.ToInt32(Console.ReadLine());
        }
        Console.WriteLine("Entering the elements for the 2nd array: ");
        int[] arr2 = new int[3];
        for (int i = 0; i < arr2.Length; i++)
        {
            arr2[i] = Convert.ToInt32(Console.ReadLine());
        }
        bool result = Array.Equals(arr1,arr2);
        if (result)
        {
            Console.WriteLine("Equal");
        }
        else
        {
            Console.WriteLine("Not equal");
        }
    }

我不断得到一个不等于

4

4 回答 4

3

这不起作用,因为 Array.Equals() 运行Object.Equals方法 - 它只比较引用。Enumerable.SequenceEqual()例如,改为使用。

于 2013-02-01T20:35:41.637 回答
0

我认为您正在比较两个 obect 容器是否相等 - 请参阅这篇文章...比较两个数组是否相等的最快方法是什么?您需要比较内容。

于 2013-02-01T20:33:14.897 回答
0

您不是在比较存储在数组中的值,而是在比较整数数组的两个不同实例。(参考文献)。
当然它们是不同的。

如果您只想检查两个数组是否包含相同的值,您可以使用 SequenceEquals LinQ 运算符,如果您希望获得两个数组之间的差异,请使用 except

if(arr1.SequenceEquals(arr2))
     Console.WriteLine("Equals");
else
     Console.WriteLine("Not equal");

....

int[] diff =  arr1.Except(arr2).ToArray();
if(diff.Length == 0) 
     Console.WriteLine("Equals");
else
     Console.WriteLine("Not equal");
于 2013-02-01T20:32:20.607 回答
0

那永远行不通。这是数组的两个不同实例。Equals 继承自 Object。

于 2013-02-01T20:32:44.060 回答