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 :

Comparaison de deux listes


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    1
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Comparaison de deux listes
    Bonjour , voila j'ai un petit probleme pour realiser une boucle afin de comparer des sous chaines de caractere dans deux listes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    // Fonction qui compare les differents ligne
            private List<string> comparerTags(List<string> fichier1, List<string> fichier2)
            {   
     
     
                //Creation d'une troisieme liste
                List<string> fichier3 = new List<string>();
     
               //Le premier cas fonctionne correctement et verifie si un une ligne est presente dans les deux fichier, il ajoute la ligne dans la liste fichier 3
                fichier1.ForEach(delegate(string tags)
                 {
                     fichier2.ForEach(delegate(string tags2)
                     {
                         if (tags != null && tags2 != null)
                         {
                             if (String.Compare(tags, tags2) == 0)
                             {
                                 fichier3.Add(tags);
     
                             }
                             else if (String.Compare(tags.Substring(0, 6), tags2.Substring(0, 6)) == 0)
                             {
     
                                 fichier3.Add(tags2);
                             }
                         }
                     });
     
                 });
     
    // Le deuxieme cas verifie qu'il y a une qui n'est pas present dans le fichier 2 on ajoute cette ligne dans la liste fichier 3
                foreach(string mot in fichier2)
                {
                    if (!fichier3.Contains(mot))
                    {
                        fichier3.Add(mot);
                    }
     
                }
     
     
    // Le troisieme cas ne fonctionne pas
                foreach(string mots in fichier1)
                {
     
                    recherche = mots.Substring(0, 6);
                    if (recherche != null)
                    {
                        fichier3.Find(item => item.Substring(0, 7) != recherche);
                        {
                            fichier3.Add(mots);
                        }
                    }
     
                }
                return fichier3;
     
            }


    car mes Listes se presentent ainsi par exemple(juste pour comprendre le contexte )

    List<string>Fichier1

    "berlin";"allemagne"
    "paris";"francque" (juste pour l'exemple )
    "madrid";"espagne"
    "barcelone";"espagne"


    List<string>Fichier2

    "berlin";"allemagne"
    "paris";"france"
    "Londres";"angleterre"
    "rome";"italie"



    Le Premier cas est respecté
    Si une ligne est presente dans les deux listes, il ajoute la ligne dans la listFichier3

    Le Deuxieme cas aussi est respecté
    Si une ligne de la listFichier2 n'est pas presente dans le fichier 3 , il l'ajoute

    Mais le troisieme cas ne fonctionne pas !
    Je souhaite realiser une boucle qui ajoute le reste des lignes de la ListFichier1 non presente dans la Listfichier 3

    <Par exemple
    "barcelone";"espagne"(la ligne non traité )


    et eviter qu'il m'ajoute aussi :
    "paris";"francque"
    "paris";"france"

    Or je veux simplement
    "paris";"france"

    car dans mon programme certaines fois il peut y avoir des modification a droite du separateur ";". Ces modifications sont mis dans la listFichier2 d'ou la volonté d'utiliser une sous-chaine pour voir si la chaine de caractere à gauche du separateur ";" sont similaires entre la listFichier1 et listFichier3.

    Ou est t'il possible de séparer ma ListFichier en deux colonnes pour pouvoir travailler sur les villes ou sur les pays?


    J'ai besoin d'aide, Merci.

  2. #2
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    En fait, tu veux faire une union?

    En effet un dictionnaire serait mieux à mon avis, mais tu peux faire quelquechose du genre (Attention fichiers1.Union(Fichier2) ne donne pas les mêmes instances que fichiers2.Union(fichier1)) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                List<string> fichiers1 = new List<string>() { "berlin;allemagne", "paris;francque", "madrid;espagne", "barcelone;espagne" };
     
                List<string> fichiers2 = new List<string>() { "berlin;allemagne", "paris;france", "Londres;angleterre", "rome;italie" };
     
                var result = fichiers2.Union(fichiers1, new MyComparer()).ToList();
    et le code de MyComparer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MyComparer : IEqualityComparer<string>
        {
     
            public bool Equals(string x, string y)
            {
                return x.Split(';')[0].Equals(y.Split(';')[0]);         
            }
     
            public int GetHashCode(string obj)
            {
                return obj.Split(';')[0].GetHashCode();
            }
        }
    J'espère avoir compris ton besoin...

    Bon dév.
    Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

    N'oubliez pas de avant de
    Pas de question techniques par MP, c'est contre la philosophie du forum

Discussions similaires

  1. [XL-2007] Comparaison de deux listes
    Par mcfly37 dans le forum Excel
    Réponses: 5
    Dernier message: 09/04/2015, 19h05
  2. comparaison de deux listes
    Par karaudrey88 dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2012, 14h04
  3. comparaison les éléments deux listes
    Par minooo dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 18/06/2012, 09h52
  4. Comparaison de deux listes
    Par Isabella83 dans le forum Langage
    Réponses: 12
    Dernier message: 30/03/2012, 12h11
  5. Comparaison de deux listes de fichier
    Par jackiechen dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 07/01/2008, 16h28

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