Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    É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 : 0
    Points
    0

    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 :
    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
    Modérateur
    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 174
    Points
    1 174

    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 :
    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 :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •