Linq 查找两个列表中的差异
我有两个这样的成员列表:
之前:Peter、Ken、Julia、Tom
之后:Peter、Robert、Julia、Tom
如您所见,Ken 退出,Robert 加入。
我想要的是检测更改。我想要一份两个列表中发生变化的列表。 linq 如何帮助我?
I have two list of members like this:
Before: Peter, Ken, Julia, Tom
After: Peter, Robert, Julia, Tom
As you can see, Ken is is out and Robert is in.
What I want is to detect the changes. I want a list of what has changed in both lists. How can linq help me?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
作为必须将两个列表传递两次的 linq 答案的替代方案,请使用 HashSet.SymmetricExceptWith ():
效率可能会高得多。
As an alternative to linq answers, which have to pass both lists twice, use HashSet.SymmetricExceptWith():
Could be considerably more efficient.
另一种方式:
Another way:
这是具有 O(n) 复杂度的版本,前提是您的序列都是有序的:
Here is the version having O(n) complexity, provided your sequences are both ordered:
您的问题尚未完全指定,但我假设您正在寻找集合中的差异(也就是说,顺序并不重要)。如果是这样,您需要两个集合的对称差。您可以使用
Enumerable.Except
:
Your question is not completely specified but I assume that you are looking for the differences as sets (that is, ordering does not matter). If so, you want the symmetric difference of the two sets. You can achieve this using
Enumerable.Except
: