作为“标题”状态,是否必须对列表进行排序才能使SequenceEqual函数起作用?
答案 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));
}