繁体   English   中英

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

[英]What is the best way to compare 2 integer lists / array in C#

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

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

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

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

如果您确实想要验证列表是否以相同的顺序包含相同的值序列,则可以在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 );

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM