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); });
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));
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![]()
Partager