Мне не нужен порядок элементов.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
Мне не нужен порядок элементов.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
Союз удаляет дубликаты. Конкат не делает.
Таким образом, они дают разные результаты, если источники либо содержат какие-либо общие элементы, либо имеют внутренние дубликаты.
Если вы можете гарантировать отсутствие дубликатов, или если их немного, и вам не нужно их выводить, Concat будет быстрее, так как нет необходимости проверять каждое значение по сравнению с тем, что уже было получено.
Однако, если есть много дубликатов, и вы им не нужны, дополнительная обработка в Union для удаления дубликатов может быть компенсирована экономией вашего кода, который использует результаты.
Вы только заботитесь о скорости выполнения? Сколько времени вам потребуется, чтобы обработать элемент, когда вы его получили?
Concat
проще - ему не нужно выполнять какую-либо обработку самостоятельно или буферировать результаты, которые она уже вернула. Однако это даст больше результатов, если на пересечении есть какие-либо элементы. Если вы потратите много времени на обработку каждого результата, Concat
может оказаться более медленным.
То, что было сказано выше, верно. Вот лишь небольшое дополнение для некоторых особых случаев:
Если вам нужно объединить, например, два списка и , если вам нужна полная скорость, рассмотрите возможность использования yield. Конечно, это намного менее гибко и комфортно, чем Union или Concat в Linq. Поэтому он имеет смысл только в особых случаях.
Это свойство, например, предоставит то же самое, что и List1.Concat(List2)
public IEnumerable<MyObject> AllObjects
{
get
{
foreach (MyObject o1 in List1)
yield return o1;
foreach (MyObject o2 in List2)
yield return o2;
}
}