在C#中比较2个整数列表/数组的最佳方法是什么?

我想比较2个整数列表是否相等。 如果能让它变得更容易,我很乐意提前对它们进行排序。 这是我要比较的两件事的例子。 对于下面,我希望结果是真的。

注意:列表中永远不会有任何重复项(没有重复值)

List list = new List(){1, 4,6,7}; int[] myArray = new int[]{1, 6,7 ,4}; 

比较列表时,平等对你意味着什么? 你是否关心列表完全相同……相同的订单中的相同项目? 或者只包含相同的值集,无论顺序如何。

如果您确实想要validation列表是否以相同的顺序包含相同的值序列,则可以在LINQ中使用SequenceEqual()方法:

 bool areEqual = listA.SequenceEqual( listB ); 

如果列表的顺序不同,您可以先对它们进行排序:

 bool areEqual = listA.OrderBy(x=>x).SequenceEqual( listB.OrderBy(x=>x) ); 

如果列表可以包含重复项,并且重复项无关紧要(关于相等性),则可以使用set comparison:

 bool setEqual = new HashSet( listA ).SetEquals( listB ); 

如果重复无关紧要,并且您有兴趣避免比较的费用(排序,构建哈希集等),您可以先比较两个集合的大小,只比较它们是否相同。

看起来你想将它们作为集合进行比较……在这种情况下:

 HashSet hashSet = new HashSet(list); if (hashSet.SetEquals(myArray)) { ... } 

注意,这将认为{1,2,2,3}和{1,3,2,3,1}相等。 那是你要的吗?

几乎可以肯定的是,内置的东西会做你想要的,但你需要在你的描述中完全准确:)

编辑:正如你所说,没有重复的元素,这应该没问题。 然而,记录这个假设可能是明智之举。