Если хотя бы один элемент списка1 находится в списке2?

Имея следующее:

public List List1 { get; set; }
...
var x = GiveMeObject();//x.List2 --> each element on list2 has an Id (int).
...
bool containsAtLeastOne = ???

Что является самым простым/быстрым/самым коротким способом (в linq), чтобы проверить, содержит ли по крайней мере 1 элемент списка1 в списке2?

благодаря

0
nl ja de
Здесь используется метод Enumerable.Any. Посмотрите здесь .
добавлено автор Wim Ombelets, источник

2 ответы

bool containsAtLeastOne  = x.List2.Any(li => List1.Contains(li.Id));
7
добавлено
Я даю вам «проголосовать» за «спасибо» за ответ и комментарии к Доминику Кекселю.
добавлено автор Dryadwoods, источник

alternative: Intersect

bool containsAtLeastOne = List1.Intersect(x.List2.Select(e => e.Id)).Any()

Если ваши коллекции становятся большими, вы должны использовать Intersect вместо Содержит , так как Intersect не меньше, чем Содержит код>. В зависимости от ваших коллекций Содержит может быстро замедляться.

If your collections are quite small (< 1000 elements), this difference would probably not matter.


Если вы не возражаете против способа, отличного от LINQ, и еще нескольких строк кода, вы можете использовать

var tmp = new HashSet(x.List2.Select(e => e.ID));
tmp.IntersectWith(list1);
bool containsAtLeastOne = tmp.Any();

который, вероятно, будет быстрее, чем подход LINQ.

1
добавлено
Но для этого требуется больше памяти, чем Содержит . @Dryadwoods: Обратите внимание, что даже Enumerable.Any и Содержит break, как только будет найдено значение (которое может быть в начале или в конце, хотя). Таким образом, чем вероятнее, что это значение существует, тем меньше разница с Intersect даже с большими коллекциями.
добавлено автор Tim Schmelter, источник
@TimSchmelter В случае best Содержит так же быстро, как Intersect , но никогда быстрее . В случае худшего разность скоростей огромная (как в чрезмерная огромная ). Вероятно, вы правы, говоря, что Intersect требуется больше памяти, поскольку она сначала копирует одну коллекцию в Set .
добавлено автор sloth, источник
В моем случае я сравниваю огромные списки, и производительность имеет решающее значение. Вот почему я выбрал ваш ответ как правильный.
добавлено автор Dryadwoods, источник
Верстка сайтов HTML/CSS/JS/PHP
Верстка сайтов HTML/CSS/JS/PHP
3 439 участник(ов)

Правила группы: напишите !rules в чате. Группа Вк: vk.com/web_structure Freelancer: @web_fl Веб Дизайн: @dev_design Маркетолог: @topmarkening Автор: @M_Boroda

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

CSS — русскоговорящее сообщество
CSS — русскоговорящее сообщество
1 502 участник(ов)

Сообщество любителей CSS Возникли проблемы с CSS? – пиши сюда, обсудим и предложим самое лучшее решение Работа: @css_ru_jobs Правила: https://teletype.in/@css_ru/r1EWtQ2w7 Приходите в наши чаты @javascript_ru и @frontend_ru Флуд: @css_flood

Чат — Типичный Верстальщик
Чат — Типичный Верстальщик
1 080 участник(ов)

Основной канал: @tpverstak Обратная связь: @annblok Все ссылки на соц.сети проекта: http://taplink.cc/tpverstak ПРАВИЛА ЧАТА — https://teletype.in/@annblok/BygPgC3E7

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

Веб-Технологи: UI/UX, Вёрстка, Фронтенд
Веб-Технологи: UI/UX, Вёрстка, Фронтенд
167 участник(ов)

Всё про веб-дизайн и вёрстку. А также: HTML, CSS, флекс и бутстрапы, шаблонизаторы, препроцессоры, методологии, аглифаеры, улучшаторы и обфускаторы. Обсуждаем темы юзабилити, устраиваем А/В тесты лендингов, и проводим аудит.

DTP :: @DTPublish
DTP :: @DTPublish
147 участник(ов)

Обсуждаемые темы: полиграфия, препресс, верстка, дизайн, иллюстрации, скрипты, плагины. Канал - @DTPublishing

css_jobs
css_jobs
26 участник(ов)

Чат для вопросов по css и html: @css_ru Флуд: @css_flood Канал с вакансиями и резюме: @css_jobs_feed

css_флуд
css_флуд
10 участник(ов)