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

C# Discussion :

Comparer 2 List<string>


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut Comparer 2 List<string>
    Bonjour,
    truc tout bête sur lequel je bloque. Quelqu'un peut me dire comment comparer 2 List<string>? (savoir si les 2 Listes contiennent les mêmes infos)
    Merci beacuoup
    Cédric

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Tu tries les 2 listes et tu compares chaque élément ensuite.

    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
    public bool CompareList(List<string> l1, List<string> l2)
    {
        if (l1.Count != l2.Count)
        {
            return false;
        }
     
        l1.Sort();
        l2.Sort();
     
        for (int i = 0; i < l1.Count; i++)
        {
            if (!l1[i].Equals(l2[i], StringComparison.InvariantCultureIgnoreCase))
            {
                return false;
            }
        }
     
        return true;
    }
    Tu peux même envisager une version générique de la chose.
    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
    public bool CompareList<T>(List<T> l1, List<T> l2, Comparison<T> comparer)
    {
        if (l1.Count != l2.Count)
        {
            return false;
        }
     
        l1.Sort(comparer);
        l2.Sort(comparer);
     
        for (int i = 0; i < l1.Count; i++)
        {
            if (comparer(l1[i], l2[i]) != 0)
            {
                return false;
            }
        }
     
        return true;
    }
    Après il faut juste adapter la méthode de comparaison. Pour une chaîne par exemple, faut-il tenir compte de la casse ou non.

    Ce qui pourrait donner, avec la version générique de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    List<string> l1 = new List<string>(new string[] { "toto", "Titi", "Tutu", "Toto", "Tata" });
    List<string> l2 = new List<string>(new string[] { "tata", "tutu", "toto", "TOTO", "tItI" });
     
    // Utilisation du StringComparer de la culture courante
    bool b1 = CompareListe(l1, l2, StringComparer.CurrentCulture.Compare);
    // Utilisation d'une méthode anonyme pour définir la méthode comparaison
    bool b2 = CompareListe(l1, l2, delegate(string s1, string s2) { return string.Compare(s1, s2, true); });
    Pas de questions techniques par MP

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Avec LINQ, il y a nettement plus simple; par exemple :

    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
     
    List<string> list1 = newList<string>();
    List<string> list2 = newList<string>();
     
    // chargement des valeurs
    list1.Add("A");
    list1.Add("B");
    list1.Add("C");
     
     
    list2.Add("A");
    list2.Add("B");
    list2.Add("C");
     
    // Comparaison des contenus des listes
    bool result = list1.All(s => list2.Contains(s)) && list2.All(s => list1.Contains(s));

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    Merci pour vos réponses. Justement je voulais éviter la boucle. je pensais qu'il existait une méthode de base pour le faire.
    A la LINQ ça m'a l'air pas mal.
    Merci beaucoup pou votre aide
    Cédric

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    N'oublie pas le tag "Résolu"

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 254
    Points : 68
    Points
    68
    Par défaut
    ha oui pardon

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

Discussions similaires

  1. [C# 2.0] Comparer deux listes
    Par Rodie dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/08/2006, 00h40
  2. Réponses: 23
    Dernier message: 08/06/2006, 15h06
  3. [VB.net] Join d'un Array list de string?
    Par the_bmo dans le forum VB.NET
    Réponses: 8
    Dernier message: 15/12/2005, 13h53
  4. Comparer des listes de prix
    Par denisfavre dans le forum Access
    Réponses: 8
    Dernier message: 08/11/2005, 20h11
  5. Comparaison d'une liste de string à un string
    Par maxazac dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/10/2005, 15h39

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