Это зависит от того, что именно вы хотите:
// are there any common values between a and b?
public static bool SharesAnyValueWith<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
return a.Intersect(b).Any();
}
Для списков, которые не перекрывают друг друга, это будет перебирать а и б каждый раз. Для списков, которые перекрываются, это приведет к повторению всей последовательности через a, затем через b, пока не будет найден первый перекрывающий элемент.
// does a contain all of b? (ignores duplicates)
public static bool ContainsAllFrom<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
return !b.Except(a).Any();
}
Это будет перебирать один раз, а затем будет перебирать б, остановка на первом элементе в б не в.
// does a contain all of b? (considers duplicates)
public static bool ContainsAllFrom<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
// get the count of each distinct element in a
var counts = a.GroupBy(t => t).ToDictionary(g => g.Key, g => g.Count());
foreach (var t in b) {
int count;
// if t isn't in a or has too few occurrences return false. Otherwise, reduce
// the count by 1
if (!counts.TryGetValue(t, out count) || count == 0) { return false; }
counts[t] = count - 1;
}
return true;
}
Подобным образом, это будет перебирать один раз, а затем будет перебирать б, остановка на первом элементе в б не в.
Определите «общие значения». Вы имеете в виду, что «в обоих списках содержатся одни и те же люди»? –
Я полагаю, что он имел в виду некоторые общие значения (= Intersect), вы можете получить это из требуемого метода «Bool DoIntersect (..)» –
Да, люди с тем же идентификатором. Но, на самом деле, я думаю, что в моем коде есть ошибка. Позвольте мне проверить и внести какие-либо поправки ... – lsibaja