recuperer - taille d une liste c#



Vérifier si la liste<t> contient une autre liste (1)

J'ai une liste de paramètres comme ceci:

public class parameter
{
    public string name {get; set;}
    public string paramtype {get; set;}
    public string source {get; set;}
}

IEnumerable<Parameter> parameters;

Et un tableau de chaînes que je veux vérifier.

string[] myStrings = new string[] { "one", "two"};

Je veux parcourir la liste des paramètres et vérifier si la propriété source est égale à l'un des tableaux myStrings. Je peux le faire avec foreach imbriqué, mais je voudrais apprendre à le faire d'une manière plus agréable que j'ai joué avec linq et comme les méthodes d'extension sur énumérable comme où etc si imbriqués foreachs se sentent mal. Y a-t-il une manière plus élégante préférée de linq / lambda / delegete de faire ceci.

Merci


Vous pouvez utiliser un Any() imbriqué pour cette vérification qui est disponible sur tout Enumerable :

bool hasMatch = myStrings.Any(x => parameters.Any(y => y.source == x));

Une exécution plus rapide sur des collections plus importantes consisterait à projeter des parameters sur source puis à utiliser Intersect qui utilise en interne un HashSet<T> donc au lieu de O (n ^ 2) pour la première approche (l'équivalent de deux boucles imbriquées) en O (n):

bool hasMatch = parameters.Select(x => x.source)
                          .Intersect(myStrings)
                          .Any(); 

Aussi, en tant que commentaire secondaire, vous devez mettre en majuscules les noms de vos classes et noms de propriété pour les conformer aux directives de style C #.





loops