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
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
Tu tries les 2 listes et tu compares chaque élément ensuite.
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(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; }
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.
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; }
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
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
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
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager