我想比较2个整数列表是否相等。如果能让它变得更容易,我很乐意提前对它们进行排序。这是我要比较的两件事的例子。对于下面,我希望结果是真的。
注意:列表中永远不会有任何重复项(没有重复值)
List<int> list = new List<int>(){1, 4,6,7};
int[] myArray = new int[]{1, 6,7 ,4};
答案 0 :(得分:24)
比较列表时,平等对你意味着什么?你是否关心列表完全相同....相同的订单中的相同项目?或者只是包含相同的值集,无论顺序如何。
如果您确实要验证列表是否包含相同顺序的相同值序列,则可以在LINQ中使用SequenceEqual()
方法:
bool areEqual = listA.SequenceEqual( listB );
如果列表的顺序不同,您可以先对它们进行排序:
bool areEqual = listA.OrderBy(x=>x).SequenceEqual( listB.OrderBy(x=>x) );
如果列表可以包含重复项,并且重复项无关紧要(关于相等性),则可以使用set comparison:
bool setEqual = new HashSet<int>( listA ).SetEquals( listB );
如果重复无关紧要并且您有兴趣避免比较的费用(排序,构建哈希集等),您可以先比较两个集合的大小,并仅比较它们是否为相同。
答案 1 :(得分:7)
看起来你想将它们比作 sets ......在这种情况下:
HashSet<int> hashSet = new HashSet<int>(list);
if (hashSet.SetEquals(myArray))
{
...
}
请注意,这将认为{1,2,2,3}和{1,3,2,3,1}相等。这就是你想要的吗?
几乎可以肯定的是,内置的内容会做你想要的,但你需要在你的描述中做到准确:)
编辑:正如你所说,没有重复的元素,这应该没问题。然而,记录这个假设可能是明智的。