簡體   English   中英

哪個更快:Union 或 Concat?

[英]Which is faster: Union or Concat?

哪個更快: UnionConcat

我不在乎元素的順序。

Enumerable.Union 方法

Enumerable.Concat 方法

Union刪除重復項。 Concat沒有。

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

如果您可以保證沒有重復項,或者如果很少有重復項並且您不關心在輸出中包含它們,則Concat會更快,因為無需針對已經產生的值測試每個值。

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

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

Concat更簡單——它不需要自己執行任何處理,也不需要緩沖已經返回的結果。 但是,如果交集中有任何元素,則會產生更多結果。 如果你要花費很長的時間來處理每一個結果, Concat ,最終可能有效地被慢。

樓上說的是對的。 這里只是一些特殊情況的補充

如果您必須連接例如兩個列表並且需要全速,請考慮使用yield 當然,這遠不如 Linq 中的UnionConcat靈活和舒適。 因此,它只在特殊情況下才有意義。

例如,此屬性將提供與List1.Concat(List2)相同的屬性

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM