Comparer 2 listes

Messages postés
7
Date d'inscription
vendredi 11 octobre 2002
Statut
Membre
Dernière intervention
1 juin 2019
- - Dernière réponse : Whismeril
Messages postés
13838
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 octobre 2019
- 22 mai 2019 à 15:45
Bonjour,

Ma question est simple, j'ai deux listes, je voudrais les comparer et mettre les éléments inexistants dans une 3ème liste, c'est à dire que lorsqu'une valeur qui se trouve dans liste 1 est introuvable dans liste 2, on l'ajoute à liste 3.


merci
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
13838
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 octobre 2019
311
1
Merci
Bonjour regarde du côté de la requête Linq Except
https://code.msdn.microsoft.com/LINQ-Set-Operators-374f34fe
Les exemples sont en C#, mais ça se traduit aisement
https://www.qwant.com/?q=C%23+to+vb&t=web

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 195 internautes nous ont dit merci ce mois-ci

okdadi
Messages postés
7
Date d'inscription
vendredi 11 octobre 2002
Statut
Membre
Dernière intervention
1 juin 2019
-
Merci bcp pour la réponse, j'ai essayé ce code mais ça n'a pas marché

Public Sub Linq52()
Dim numbersA(lst.Items.Count) As Integer
Dim numbersB(lstData.Items.Count) As Integer
Dim I, J As Integer

For I = 0 To lst.Items.Count - 1
numbersA(I) = lst.Items.Item(I).ToString
Next

For J = 0 To lstData.Items.Count - 1
numbersB(J) = lstData.Items.Item(J).ToString
Next

Dim aOnlyNumbers As IEnumerable(Of Integer) = numbersA.Except(numbersB)

For I = 0 To aOnlyNumbers.Count - 1
lstManque.Items.Add(aOnlyNumbers(I).ToString)
Next
End Sub
Commenter la réponse de Whismeril
Messages postés
1946
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 octobre 2019
68
0
Merci
bonjour !
Dim numbersA(lst.Items.Count) As Integer
Dim numbersB(lstData.Items.Count) As Integer 


Avec ces 2 lignes tu travailles avec des tableaux
Il faut que tu travailles avec des collections de type List(of)
vb95
Messages postés
1946
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 octobre 2019
68 -
Rebonjour Okdadi
autre erreur que tu as fait
Dim numbersA(lst.Items.Count) As Integer
Dim numbersB(lstData.Items.Count) As Integer
 

Là tu crées 2 tableaux avec des valeurs de type Integer

Ce tableau d'Integer n'accepte pas des valeurs de type String
For I = 0 To lst.Items.Count - 1
     numbersA(I) = lst.Items.Item(I).ToString
Next 


C'est comme mélanger les torchons et les serviettes Dans ton armoire !
Commenter la réponse de vb95
Messages postés
13838
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 octobre 2019
311
0
Merci
Bonsoir,

Linq accepte toutes sortes de collection y compris des tableaux, et si ça se trouve lst.Item et lstData.Item, de quels types sont ces variables.

Par contre, la seconde remarque de VB est parfaitement correcte, un tableau d'entier n'est pas fait pour être chargé avec des string, si ton compilateur l'accepte c'est que tu as laissé Option Strict et Option Explicit désactivées, laissant le compilateur choisir lui même la façon dont il gère ces incohérences. Parfois il ne le fait pas comme on le pense, et c'est assez difficile de trouver ce qui ne vas pas.

Commenter la réponse de Whismeril
Messages postés
13838
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 octobre 2019
311
0
Merci
Voilà un exemple avec des tableaux
        Dim entiers As Integer() = Enumerable.Range(0, 21).ToArray()
        Dim pairs As Integer() = Enumerable.Range(0, 21).Where(Function(n) n Mod 2 = 0).ToArray()
        Dim impairs As Integer() = entiers.Except(pairs).ToArray()



PS pour tes prochains posts, merci de lire et d'appliquer ce qui est décrit là https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Commenter la réponse de Whismeril
0
Merci
Bonjour les gars,

Merci beaucoup pour vos réponses
je viens de trouver cette solution et elle marche très bien

    Dim items1() As String = ListBox1.Items.Cast(Of String).ToArray
    Dim items2() As String = ListBox2.Items.Cast(Of String).ToArray
    ListBox3.Items.AddRange(items2.Except(items1).ToArray)
Commenter la réponse de okdadi
Messages postés
13838
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
19 octobre 2019
311
0
Merci
Ha, tu voies le problème c'est
Ma question est simple, j'ai deux listes,
donc nous bêtement, on t'as expliqué avec des listes, puis tu as montré un code avec un tableau, alors on t'a expliqué avec des tableau.
Au final, tu te sers de ListBox ce qui est une troisième chose.

La prochaine fois, sois précis dans ta question, on répondra directement comme il faut.
Commenter la réponse de Whismeril