ответ
Союз удаляет дубликаты. Concat - нет.
Таким образом, они дают разные результаты, если источники либо содержат какие-либо общие элементы, либо имеют внутренние дубликаты.
Если вы можете гарантировать отсутствие дубликатов, или если их немного, и вы не заботитесь о том, чтобы они были на вашем выходе, Concat будет быстрее, так как нет необходимости проверять каждое значение по сравнению с уже полученным.
Однако, если есть много дубликатов, и вы им не нужны, дополнительная обработка в Союзе для удаления дубликатов может быть компенсирована экономией вашего кода, который потребляет результаты.
Вы заботитесь только о скорости выполнения? Сколько времени потребуется, чтобы обработать элемент, когда вы его получили?
Concat
более простой - ему не нужно выполнять какую-либо обработку самостоятельно или буферировать результаты, которые уже были возвращены. Однако это даст больше результатов, если на пересечении есть какие-либо элементы. Если вы потратите много времени на обработку каждого результата, Concat
может в конечном итоге эффективно медленнее.
В моем случае, я использую Distinct() в конце, что благоприятствует использованию Союза, я думаю. –
Если вы используете Union, тогда вам не нужно вызывать Distinct в любом случае. –
Союз удаляет дубликаты между списками, но если в первом списке есть дубликаты внутри себя, они не будут удалены объединением. Так что, в зависимости от обстоятельств, все равно нужно будет вызывать различие. –
То, что было сказано выше, является правильным. Вот только немного дополнение для некоторых специальных случаев:
Если вы должны сцепить, например два списка и , если вам нужна полная скорость, рекомендуется использовать выход. Конечно, это намного менее гибкий и удобный, чем Союз или 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;
}
}
'Concat' точно делает это так, как вы показываете его в примере (см. [источник] (https://referencesource.microsoft.com/#System.Core/System/Linq/ Enumerable.cs # 800)). Поэтому нет необходимости реализовывать его самостоятельно. – scher
- 1. Оптимизировать строку + = или Конкат?
- 2. , который быстрее? NSXMLParser или KissXML
- 3. Который быстрее «подсчет» или «длина»?
- 4. , который быстрее - строка + или jQuery?
- 5. , который быстрее mysqli_prepare или mysqli_query?
- 6. который быстрее: за или Еогеасп
- 7. Который быстрее ASP.NET или PHP
- 8. который быстрее, getimeofday или clock_gettime?
- 9. , который быстрее binarysearch или indexof?
- 10. , который быстрее? Заявление или PreparedStatement
- 11. Это СОЮЗ, И ИЛИ ИЛИ?
- 12. Который быстрее?
- 13. Использование «где затем Союз» или с помощью "Союз тогда Где
- 14. союз против или
- 15. MYSQL союз или заказ?
- 16. Расчет расстояния, который быстрее MongoDB или MySQL
- 17. для цикла или цикла while, который быстрее?
- 18. Который быстрее: MRI Ruby или JRuby?
- 19. Правильно? который быстрее CPU или I \ O
- 20. , который быстрее, сериализован, ini или XML
- 21. , который быстрее/лучше strcasecmp() или равен оператору?
- 22. Который быстрее, СУЩЕСТВУЕТ до или после ВСТАВКИ?
- 23. C#, который быстрее выполняет/пока или для?
- 24. Который быстрее? Основной скрипт или скрипт переменной
- 25. , который быстрее: активный псевдо или добавляет класс
- 26. В PHP, который быстрее: preg_split или explode?
- 27. , который быстрее, или он считается плохим кодом
- 28. Который быстрее двух случаев или если?
- 29. Который быстрее: «null == myObject» или «myObject == null»?
- 30. делает союз или союз все делают большую разницу?
Попробуйте оба способа. Выйдите из секундомера. Тогда вы узнаете. Эффективный «анализ» на основе «догадок», независимо от того, насколько он образован, на самом деле не полезен в качестве основы для принятия * инженерных решений. –