Я хочу знать, можно ли найти хотя бы один элемент в первом списке во втором списке.Как найти элемент списка в другом списке?
Я вижу два способа сделать это. Скажем, наши списки:
List<string> list1 = new[] { "A", "C", "F", "H", "I" };
List<string> list2 = new[] { "B", "D", "F", "G", "I" };
Первый подход использует цикл:
bool isFound = false;
foreach (item1 in list1)
{
if (list2.Contains(item1))
{
isFound = true;
break;
}
}
Второй использует Linq непосредственно:
bool isFound = list1.Intersect(list2).Any();
Первый долго писать и не очень просто/легко читается. Второй - короткий и понятный, но выступления будут низкими, особенно в больших списках.
Что может быть изящным способом сделать это?
Я думаю, что второй один будет быстрее для больших списков. Поскольку первый - это «O (list1.Count * list2.Count)», а второй - «O (list1.Count + list2.Count)». Второе занимает больше памяти. – CodesInChaos
Если вы действительно хотите использовать LINQ для поиска * точно *, как ваш первый образец, используйте 'bool isFound = list1.Any (list2.Contains);' – Ani
Но, конечно, этот вариант, так же как и исходный код, имеет квадратичную производительность. – CodesInChaos