列表是否必须排序list.SequenceEqual()函数才能正常工作?

时间:2019-04-04 16:09:20

标签: c# list .net-core

作为“标题”状态,是否必须对列表进行排序才能使SequenceEqual函数起作用?

1 个答案:

答案 0 :(得分:3)

SequenceEqual是IEnumerable的扩展,而不仅仅是List。

如其文档所述,它将返回:

  

true,如果两个源序列的长度相等,并且根据其类型的默认相等比较器,其相应元素相等;否则为false

可枚举对象没有必须进行排序,以使方法正常工作(即不抛出)。

但是,如果两个列表以不同的顺序包含相同的项目,则它将返回false。这正是预期的。即使可枚举值包含重复的值,它也将起作用,因为它并不真正关心值的位置,而只关心对应的值是什么。

如果要检查两个不重复的列表 是否包含相同的项,则无论顺序如何,都应使用HashSet及其SymmetricExceptWith方法。如果哈希集在调用后包含任何项目,则意味着列表不包含相同的项目。例如:

var set1=new HashSet<int>(someList1);
set1.SymmetricExceptWith(someList2);
if (set1.Count>0)
{
    Console.WriteLine("Not the same values! Here are the differences:");
    Console.WriteLine(String.Join(",",set1));
}