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

时间:2011-04-23 20:01:44

标签: c# arrays integer

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

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

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

2 个答案:

答案 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}相等。这就是你想要的吗?

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

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