c# - from - Compruebe si hay algún elemento que exista en dos colecciones
select linq c# list (1)
Me pregunto si Linq tiene un método para verificar si dos colecciones tienen al menos un elemento en común. Yo esperaría algo como esto:
var listA = new List<int>() { some numbers };
var listB = new List<int>() { some numbers, potentially also in list A };
bool hasSameElements = listA.hasMatchingElements(listB);
¿Existe en Linq o debo escribir un método personalizado para él?
Soy consciente del método Intersect, pero ¿esto no produce el conjunto de intersecciones completo? Solo estoy interesado en verificar SI las dos colecciones se cruzan, el rendimiento de todo el conjunto parece un desperdicio, especialmente en las colecciones más grandes.
Suena como si solo quisieras:
bool hasSameElements = listA.Intersect(listB).Any();
EDITAR: Como se señaló en los comentarios, Intersect
utiliza la evaluación perezosa. Difiere toda la ejecución hasta que el primer elemento se lee del resultado; en ese punto cargará toda la lista listB
en un conjunto, y luego transmitirá la listA
hasta que encuentre un resultado para producir. En ese momento, Any()
devolverá true
y, por lo tanto, no se hará más trabajo. Ver mi publicación Edulinq en Intersect
para más información.