2009-08-26 69 views

回答

49

聯盟刪除重複。 Concat沒有。

因此,如果來源包含任何共同項目,或者有任何內部重複項目,它們會產生不同的結果。

如果您可以保證沒有重複項,或者只有很少的數據,並且您不關心在輸出中使用它們,那麼Concat將會更快,因爲無需針對已經生成的數據測試每個值。

但是,如果有很多重複項,並且您不需要它們,則Union中用於移除重複項的額外處理可能會因代碼中節省的消耗結果而抵消。

9

你只關心執行速度嗎?您收到它時需要多長時間來處理元素?

Concat更簡單 - 它不需要執行任何處理本身,或緩衝它已經返回的結果。但是,如果交集中有任何元素,它會產生更多結果。如果你要花費很長時間來處理每個結果,Concat可能最終有效有效變慢。

+0

就我而言,我最終會使用Distinct(),這有利於我使用Union。 – 2009-08-26 21:54:54

+6

如果你使用聯盟,那麼無論如何你都不需要調用Distinct。 – 2009-08-26 21:57:51

+2

聯合會刪除列表之間的重複項,但如果第一個列表中有重複項,則這些重複項不會被聯合刪除。所以 - 根據具體情況,可能仍然需要調用。 – 2009-08-27 12:24:02

3

以上說的是正確的。 這裏只是一個小除了一些特殊情況

如果你有,如果你需要全速來連接例如兩個列表和,考慮使用產量。當然這比UnionConcat Linq中的靈活性和舒適性要低得多。因此在特殊情況下才有意義。

此屬性,例如將提供相同List1.Concat(列表2)

public IEnumerable<MyObject> AllObjects 
    { 
     get 
     { 
      foreach (MyObject o1 in List1) 
       yield return o1; 

      foreach (MyObject o2 in List2) 
       yield return o2; 
     } 
    } 
+0

'Concat'完全按照您在示例中顯示的方式進行操作(請參閱:[source](https://referencesource.microsoft.com/#System.Core/System/Linq/ Enumerable.cs#800))。所以沒有必要由你自己來實現它。 – scher 2017-11-08 10:21:06