哪个更快:Union或Concat?

问题描述 投票:18回答:3

哪个更快:UnionConcat

我不在乎元素的顺序。

Enumerable.Union Method

Enumerable.Concat Method

c# .net linq union concat
3个回答
52
投票

联合会删除重复项。Concat没有。

因此,如果源包含任何共同的项目或具有任何内部重复项,则它们将产生不同的结果。

[如果您可以保证没有重复项,或者只有很少的重复项并且您不关心在输出中包含重复项,那么Concat会更快,因为无需针对已经产生的值测试每个值。

但是,如果有很多重复项,而您不需要它们,则Union中用于删除重复项的额外处理可能会被使用结果的代码节省所抵消。


10
投票

您只关心执行速度吗?收到元素需要多长时间处理?

Concat更简单-它本身不需要执行任何处理,也不需要缓冲已经返回的结果。但是,如果相交中有任何元素,它将产生更多结果。如果要花很长时间来处理每个结果,则Concat可能会有效变慢。


3
投票

上面所说的是对的。 这里只是一些特殊情况的一点补充

例如,如果必须连接两个列表,并且如果需要全速,请考虑使用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;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.