IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C# 2.0] Comparer deux listes


Sujet :

Windows Forms

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 122
    Points
    122
    Par défaut [C# 2.0] Comparer deux listes
    Bonjour à tous

    J'ai deux listes d'objets bien à moi. Les objets sont des instances de la même classe "myClass" ayant deux propriétés : "id" et "pseudo"
    List<myClass> myList1 = ...
    List<myClass> myList2 = ...
    Mon but est de détecter tous les élements de la liste myList2 qui ont leur "id" qui n'existe pas dans la liste myList1.
    En gros, c'est comme utiliser la méthode List.Contains(), mais sur une propriété de l'objet et non l'objet lui-même.

    Je n'arrive pas vraiment à écrire d'algo, et je me demande s'il ne faut pas plutôt que je créer mon propre type de liste (INumerable) et overrider la méthode Contains()... ou qqch comme ça.

    Merci bien si vous pouvez m'éclairer, en espérant que j'ai été clair...

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Et bien je crois que tu as péondu toi même à ta question: la redéfinition de la méthode contains par héritage te conviendra parfaitement, bref conception objet oblige.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Utilise plutot les Predicate que t'offre la classe Generic List :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    List<myClass> trouvePas = new List<myClass>();
     
    foreach (myClass obj in myList1)
    {
       if (!myList2.Exists(delegate(myClassmType) { return mType.ID == obj.ID; }))
       {
          trouvePas.Add(obj);
       }
    }

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 171
    Points : 122
    Points
    122
    Par défaut
    Ah, pas mal le coup du predicate
    Juste un ptit truc. J'ai changé la liste "trouvePas" en "trouve", et je veux y mettre les éléments de myList2, et non myList1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    List<myClass> trouve = new List<myClass>();
     
    foreach (myClass obj in myList1)
    {
       if (myList2.Exists(delegate(myClass mType) { return mType.ID == obj.ID; }))
       {
          trouve.Add(myList2.Find(delegate(myClass mType) { return mType.ID == obj.ID; }));
       }
    }
    En supposant que je déclare le predicate ailleurs et une seule fois, le code précédent n'est pas "sale" ?

    Merci bcp de votre aide en tout cas. J'apprends beaucoup

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Rodie
    En supposant que je déclare le predicate ailleurs et une seule fois, le code précédent n'est pas "sale" ?
    "sale" non mais je trouve que ca pique un peu les yeux....

    Lorsque tu développes, dis toi que tu n'ais pas forcément le seul à travailler/relire ton code donc met toi à la place de quelqu'un de moins expérimenté: j'en connais peu qui serait à même de comprendre, du 1er coup, ce que tu as écrit....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparer deux listes
    Par timtim2007 dans le forum Prolog
    Réponses: 7
    Dernier message: 07/06/2019, 09h02
  2. Comparer deux listes
    Par jnauche dans le forum VBScript
    Réponses: 3
    Dernier message: 02/06/2008, 11h07
  3. operator== pour comparer deux listes
    Par docky dans le forum C++
    Réponses: 10
    Dernier message: 18/05/2008, 17h49
  4. Requete pour comparer deux listes
    Par Jean-Christoph dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/04/2008, 13h29
  5. Comparer deux listes de listes
    Par julien80 dans le forum Prolog
    Réponses: 5
    Dernier message: 05/03/2008, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo