除了和交叉操作的顺序总是可以忽略吗?

时间:2014-11-04 14:48:27

标签: c# linq list intersect except

对我而言,似乎任何操作都像

var list = new List<int>();
// list.Add some elements...
list.Except(anotherList).Intersect(yetAnotherList)

这总是一样的:

list.Intersect(yetAnotherList).Except(anotherList)

我不是百分百肯定。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

从纯粹的理论角度来看,这里的顺序无关紧要。在这两个步骤中,您只需从list中删除元素。如果元素位于anotherList中的yetAnotherList,则会从列表中删除该元素。是否在前一句中切换“或”的操作数并没有什么区别。

为了说明,让我们构造三个列表(这里设置,因为这些是设置操作):

list = { A, B, C, D }
anotherList = { A, B, E, F }
yetAnotherList = { A, C, E, G }

此处的每个集合都有一个元素,它位于所有三个集合中(A),一个元素位于每个其他集合中,一个元素仅存在于该集合中但不存在于其他集合中。所以我们在这里讨论了所有可能的交集和集合差异的情况。

list.Except(anotherList)会产生{ C, D }。将其与yetAnotherList相交会产生{ C }

list.Intersect(yetAnotherList)会产生{ A, C }。取消anotherList再次产生{ C }