visual studio secuencia mas elementos elemento contiene coincidente c# linq

c# - studio - Determine si una secuencia contiene todos los elementos de otra secuencia usando Linq



la secuencia no contiene elementos visual studio (4)

Esta pregunta ya tiene una respuesta aquí:

Dado dos conjuntos de valores:

var subset = new[] { 2, 4, 6, 8 }; var superset = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

¿Cómo determino si el superset contiene todos los elementos del subset ?

He venido con esto:

superset.Intersect(subset).Count() == subset.Count()

¿Es este el método más lógico y eficiente?


¿Contar? ¿Qué tal, nada?

bool contained = !subset.Except(superset).Any();


Entonces, mi otra respuesta fue bastante fácil de usar. Pero es una solución O (n * m).

Aquí hay una solución O (n + m) ligeramente menos amigable. Esto debería usarse si el superconjunto es ENORME. Evita repetidamente enumerar superconjunto.

HashSet<int> hashSet = new HashSet<int>(superset); bool contained = subset.All(i => hashSet.Contains(i));


Podría usar Except y el recuento resultante debería ser 0.

Lea en MSDN para obtener detalles de los parámetros.

Ejemplo:

subset.Except(superset).Count() == 0


Tengo un método de extensión que usa el método existente Contiene (). Me resulta más intuitivo que usar Instersect () o Except ().

public static bool ContainsAll<T>(this IEnumerable<T> source, IEnumerable<T> values) { return values.All(value => source.Contains(value)); }