哪个更快:Union或Concat?

时间:2009-08-26 21:48:11

标签: c# .net linq union concat

3 个答案:

答案 0 :(得分:51)

Union删除重复项。 康卡特没有。

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

如果你可以保证没有重复项,或者你的输出中没有重复项并且你不关心它们,那么Concat会更快,因为没有必要针对已经产生的数据测试每个值。 / p>

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:3)

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

如果您需要连接示例两个列表,如果您需要全速,则,请考虑使用 yield 。当然,这比Linq中的 Union Concat 更不灵活和舒适。因此,只有在特殊情况下才有意义。

例如,此属性将提供与List1.Concat(List2)

相同的属性
    public IEnumerable<MyObject> AllObjects
    {
        get
        {
            foreach (MyObject o1 in List1)
                yield return o1;

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