168 votes

LINQ: Vérifier si un tableau est un sous-ensemble d'un autre

Une idée sur la façon de vérifier si cette liste est un sous-ensemble d'un autre?

Plus précisément, j'ai

 List<double> t1=new List<double>{1,3,5}
List<double> t2=new List<double>{1,5}
 

Comment vérifier que t2 est un sous-ensemble de t1, en utilisant LINQ?

284voto

Cameron MacFarland Points 27240
bool isSubset = !t2.Except(t1).Any();

71voto

tvanfosson Points 268301

Utilisez HashSet au lieu de List si vous utilisez des ensembles. Ensuite, vous pouvez simplement utiliser IsSubsetOf ()

 HashSet<double> t1 = new HashSet<double>{1,3,5};
HashSet<double> t2 = new HashSet<double>{1,5};

bool isSubset = t2.IsSubsetOf(t1);
 

Désolé de ne pas utiliser LINQ. :-(

Si vous avez besoin d’utiliser des listes, la solution de @ Jared fonctionne avec l’avertissement selon laquelle vous devrez supprimer tous les éléments répétés existants.

6voto

Neil Points 1859

La solution de Cameron en tant que méthode d'extension:

 public static bool IsSubsetOf<T>(this IEnumerable<T> a, IEnumerable<T> b)
{
    return !a.Except(b).Any();
}
 

Usage:

 bool isSubset = t2.IsSubsetOf(t1);
 

(Ceci est similaire, mais pas tout à fait le même que celui posté sur le blog de @ Michael)

-1voto

JaredPar Points 333733

Essayez ceci

L’idée ici est que Intersect retourne uniquement les valeurs qui sont dans les deux tableaux. À ce stade si la longueur du jeu résultant est le même que le jeu original, alors tous les éléments dans « set » sont également en « échec » et « set » est donc un sous-ensemble des « toCheck »

Remarque : Ma solution ne fonctionne pas si le « set » a des doublons. Je ne suis pas changer parce que je ne veux pas voler les voix d’autres personnes.

Astuce : J’ai voté pour réponse de Cameron.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X