2014-11-04 30 views
1

對我來說,這似乎是except和intersect操作的順序總是可以忽略的?

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

任何操作是這樣的總是相同的,如:

list.Intersect(yetAnotherList).Except(anotherList) 

我不是100%肯定。

感謝您的幫助。

回答

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 }

+0

也許應該注意的是'Intesect'和'Except'都保留了元素的原始順序 - 因此兩個版本都會產生相同的結果。 – decPL 2014-11-04 15:09:28

+0

你的第二句話是不正確的....一種奇怪的方式來說它。我認爲你的意思是你得到了一個清單,其中包含了yetAnotherList中的所有元素,但沒有列出anotherList中的所有元素。 – Kaz 2014-11-04 15:11:55

+1

@Joey「如果yetAnotherList中沒有所有元素,並且沒有不在yetAnotherList中的所有元素」將不會產生任何結果。 – Kaz 2014-11-04 15:20:42