哪个更快:Union或Concat?
我不关心元素的顺序。
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
http://msdn.microsoft.com/en-us/library/bb302894.aspx
Union删除重复项。 康卡特没有。
因此,如果源包含任何共同的项目,或者具有任何内部重复项,则它们会产生不同的结果。
如果您可以保证没有重复项,或者如果您没有重复,并且您不关心在输出中使用它们,那么Concat会更快,因为不需要针对已经产生的值测试每个值。
但是,如果有许多重复项并且您不需要它们,则Union中用于删除欺骗的额外处理可能会被代码中节省的结果所抵消。
你只关心执行速度吗? 收到元素后处理元素需要多长时间?
Concat
更简单 – 它不需要自己执行任何处理,也不需要缓冲已经返回的结果。 但是,如果交叉点中有任何元素,它将产生更多结果。 如果您需要花费很长时间来处理每个结果, Concat
最终可能会变慢。
上面说的是对的。 以下是一些特殊情况的补充 :
如果必须连接两个列表, 如果需要全速,请考虑使用yield 。 当然,这比Linq的Union或Concat灵活性和舒适度要低得多。 因此,在特殊情况下它才有意义。
例如,此属性将提供与List1.Concat(List2)相同的属性
public IEnumerable AllObjects { get { foreach (MyObject o1 in List1) yield return o1; foreach (MyObject o2 in List2) yield return o2; } }