Пересечение может использоваться для поиска совпадений между двумя коллекциями, например так:
// Assign two arrays.
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
// Call Intersect extension method.
var intersect = array1.Intersect(array2);
// Write intersection to screen.
foreach (int value in intersect)
{
Console.WriteLine(value); // Output: 2, 3
}
Однако то, что я хотел бы достичь, это наоборот, я хотел бы перечислить элементы из одной коллекции, которые отсутствуют в другой :
// Assign two arrays.
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
// Call "NonIntersect" extension method.
var intersect = array1.NonIntersect(array2); // I've made up the NonIntersect method
// Write intersection to screen.
foreach (int value in intersect)
{
Console.WriteLine(value); // Output: 4
}
c#
.net
collections
intersect
Питер Бриджер
источник
источник
Ответы:
Как уже говорилось, если вы хотите получить 4 в результате, вы можете сделать так:
Если вы хотите реальное отсутствие пересечения (также и 1 и 4), то это должно сработать:
Это не будет наиболее эффективным решением, но для небольших списков должно работать просто отлично.
источник
Ты можешь использовать
Или вы можете использовать
источник
SymmetricExceptWith
наверное мой любимый метод.Этот код перечисляет каждую последовательность только один раз и использует
Select(x => x)
чтобы скрыть результат, чтобы получить чистый метод расширения в стиле Linq. Поскольку он используетHashSet<T>
свое время выполнения, этоO(n + m)
если хеши хорошо распределены. Дублирующиеся элементы в любом списке опущены.источник
Я думаю, что вы можете искать
Except
:Проверьте эту ссылку , эту ссылку или Google, для получения дополнительной информации.
источник
Я не уверен на 100%, что должен делать ваш метод NonIntersect (в отношении теории множеств) - это
B \ A (все из B, чего нет в A)?
Если да, то вы сможете использовать операцию «Кроме» (B.Except (A)).
источник
источник
array1.NonIntersect (массив2);
Непересекающегося такого оператора нет в Linq, вы должны сделать
кроме -> союз -> кроме
источник
источник