Quiero saber si al menos un elemento en una primera lista se puede encontrar en una segunda lista.¿Cómo buscar si un elemento de una lista está en otra lista?
Puedo ver dos formas de hacerlo. Digamos nuestras listas son:
List<string> list1 = new[] { "A", "C", "F", "H", "I" };
List<string> list2 = new[] { "B", "D", "F", "G", "I" };
El primer enfoque utiliza un bucle:
bool isFound = false;
foreach (item1 in list1)
{
if (list2.Contains(item1))
{
isFound = true;
break;
}
}
El segundo utiliza LINQ directamente:
bool isFound = list1.Intersect(list2).Any();
El primero de ellos es mucho tiempo para escribir y no muy sencillo/fácil de leer. El segundo es corto y claro, pero las actuaciones serán bajas, especialmente en listas grandes.
¿Cuál puede ser una manera elegante de hacerlo?
Creo que el segundo será más rápido para grandes listas. Dado que el primero es 'O (list1.Count * list2.Count)' mientras que el segundo es 'O (list1.Count + list2.Count)'. En segundo lugar, se necesita más memoria. – CodesInChaos
Si realmente quiere usar LINQ para buscar * exactamente * como su primera muestra, use 'bool isFound = list1.Any (list2.Contains);' – Ani
Pero por supuesto esa variante, al igual que el código original tiene un rendimiento cuadrático. – CodesInChaos