111 votes

Est-ce que .NET a un moyen de vérifier si la liste a contient tous les éléments de la liste b?

J'ai la méthode suivante:

 namespace ListHelper
{
    public class ListHelper<T>
    {
        public static bool ContainsAllItems(List<T> a, List<T> b)
        {
            return b.TrueForAll(delegate(T t)
            {
                return a.Contains(t);
            });
        }
    }
}
 

Le but est de déterminer si une liste contient tous les éléments d’une autre liste. Il me semblerait que quelque chose comme ceci serait déjà intégré à .NET, est-ce le cas et est-ce que je duplique des fonctionnalités?

Edit: Je m'excuse de ne pas avoir indiqué à l'avance que j'utilise ce code dans la version 2.4.2 de Mono.

193voto

Jon Skeet Points 692016

Si vous utilisez .NET 3.5, rien de plus simple:

 public static bool ContainsAllItems(List<T> a, List<T> b)
{
    return !b.Except(a).Any();
}
 

Ceci vérifie s'il y a des éléments dans b qui ne sont pas dans a - puis inverse le résultat.

35voto

drzaus Points 3344

Juste pour le plaisir, la réponse de @ JonSkeet en tant que méthode d'extension:

 /// <summary>
/// Does a list contain all values of another list?
/// </summary>
/// <remarks>Needs .NET 3.5 or greater.  Source:  http://stackoverflow.com/a/1520664/1037948 </remarks>
/// <typeparam name="T">list value type</typeparam>
/// <param name="containingList">the larger list we're checking in</param>
/// <param name="lookupList">the list to look for in the containing list</param>
/// <returns>true if it has everything</returns>
public static bool ContainsAll<T>(this IEnumerable<T> containingList, IEnumerable<T> lookupList) {
    return ! lookupList.Except(containingList).Any();
}
 

0voto

user3210251 Points 25

Vous pouvez également utiliser un autre moyen. Ignorer et utiliser cette

 public bool ContainsAll(List<T> a,List<T> check){

list l = new List<T>(check);
foreach(T _t in a){

if(check.Contains(t)){
check.Remove(t);
if(check.Count == 0){
return true;
}
}
return false;
}
 

}

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