Performance 比较两个列表内容的最有效方法是什么?

Performance 比较两个列表内容的最有效方法是什么?,performance,linq,c#-4.0,Performance,Linq,C# 4.0,考虑到下面的两个列表,最好的比较方法是什么 var a = new List<string>() { "2016", "2017" }; var b = new List<string>() { "2017", "2018" }; var a=newlist(){“2016”、“2017”}; var b=新列表(){“2017”、“2018”}; 独立于订单比较: bool result = a.Count == b.Count && a.Inte

考虑到下面的两个列表,最好的比较方法是什么

var a = new List<string>() { "2016", "2017" };  
var b = new List<string>() { "2017", "2018" };
var a=newlist(){“2016”、“2017”};
var b=新列表(){“2017”、“2018”};

独立于订单比较:

bool result = a.Count == b.Count && a.Intersect(b).Count() == a.Count;
这对我很有效(但列表必须有序且清晰):


谢谢你们的努力!:)

这些名单都排好了吗?内存效率还是运行效率?(或者两者都有?什么更重要?)你需要知道它们是否不同,或者填写差异列表?你需要/想要什么样的比较结果?@OriNachum独立于顺序、运行效率,我需要知道它们是否不同。谢谢:)@OriNachum或仅一个
for
循环,在长度比较之后(假设不同的长度也是一个失败条件)。@OriNachum这不完全准确。在简单的情况下,底层枚举是一个
IList
(用法很简单,无法具体记住规则),编译器实际上会将
foreach
更改为
for
,并避免分配枚举器状态机和一些临时变量,以支持直接数组内存访问和计数器。撇开效率不谈,它使您不再需要两次
foreach
调用。直接从文档中可以看出:“SetEquals方法忽略重复的条目和其他参数中元素的顺序。”因此,您需要了解这些规则对于OP是否有效。顺序似乎不是问题,但重复的可能是问题(由于散列集可能不允许重复而减轻)。@AdamHouldsworth“独立于顺序”让我觉得它们不是有序的。我知道,我也发表了很多评论-我只是给答案添加了更多的信息,而不是一行代码。如果列表是有序的和不同的,你应该在问题中指定它。因此,与其发布这个琐碎的答案,你最好删除整个帖子。@IvanStoev它是在评论中指定的。。。:)@AndréLuistosotatodacruz,你说的“独立于秩序”,这意味着它们没有秩序,也没有提到distinct。({1,1}!={1})@OriNachum在这个答案中,我说“必须是有序的和不同的”只是为了使用这个解决方案,但我的主要问题不需要排序。
a.SequenceEqual(b)