Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Windows > Windows Forms
Windows Forms Forum d'entraide sur le développement Windows Forms & Applications Windows. Avant de poster -> Articles Windows Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/12/2012, 09h34   #1
chesrome
Invité de passage
 
Étudiant
Inscription : 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.
chesrome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 12h33   #2
sisqo60
Membre Expert
 
Avatar de sisqo60
 
Homme
Consultant informatique
Inscription : février 2006
Messages : 731
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 : 731
Points : 1 150
Points : 1 150
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
sisqo60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h22.


 
 
 
 
Partenaires

Hébergement Web