c#中比较两个整数列表/数组的最好方法是什么?

本文关键字:数组 是什么 方法 列表 整数 比较 两个 | 更新日期: 2023-09-27 17:53:07

我想比较两个整数列表是否相等。如果方便的话,我很乐意提前排序。下面是我想比较的两个例子。对于下面的语句,我希望结果为真。

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

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

c#中比较两个整数列表/数组的最好方法是什么?

在比较列表时相等对你来说意味着什么?你关心列表是否完全相同....同样的货物,同样的顺序?或者只包含相同的一组值,而不考虑顺序。

如果您确实想要验证列表是否包含相同顺序的相同序列的值,您可以使用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}是相等的。这就是你想要的吗?

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

编辑:正如你所说的不会有重复的元素,这应该是好的。不过,记录这个假设可能是明智的。