当前位置:  开发笔记 > 编程语言 > 正文

C#:比较两个IEnumerables的内容

如何解决《C#:比较两个IEnumerables的内容》经验,为你挑选了2个好方法。

是否有一个内置的linq方法的东西,我可以用来找出两个序列是否包含相同的项目,而不考虑订单?

例如:

{1, 2, 3} == {2, 1, 3}
{1, 2, 3} != {2, 1, 3, 4}
{1, 2, 3} != {1, 2, 4}

你有SequenceEquals,但是我必须首先对两个序列进行排序,不是吗?



1> leppie..:

有很多方法.假设A和B是IEnumerable.

!A.Except(B).Any() && !B.Except(A).Any()
A.Count() == B.Count() && A.Intersect(B).Count() == B.Count()
etc


query.Count()== 0与!query.Any()相同,但any调用更快,因为它不评估整个列表.
此代码仅在序列为集合时有效,即其中没有重复项

2> 小智..:

有两个IEnumerables(A和B):

bool equal = (A.Count() == B.Count() && (!A.Except(B).Any() || !B.Except(A).Any()))

我认为这比Except(A).Count更好,因为不会评估整个Excep.只要在"除外"中找到一个元素,它就会停止.使用Count,可以评估整个Except.除此之外,我们可以避免对这些代价高昂的评估,除非首先检查Count属性.如果计数不相等,那么我们检查Excepts.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有