Comparer 2 listes

okdadi Messages postés 7 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 1 juin 2019 - 15 mai 2019 à 13:43
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 - 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

6 réponses

Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
15 mai 2019 à 14:03
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
1
okdadi Messages postés 7 Date d'inscription vendredi 11 octobre 2002 Statut Membre Dernière intervention 1 juin 2019
16 mai 2019 à 10:40
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
0
vb95 Messages postés 3418 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 31 mai 2023 165
16 mai 2019 à 13:52
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)
0
vb95 Messages postés 3418 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 31 mai 2023 165
16 mai 2019 à 17:27
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 !
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
16 mai 2019 à 17:37
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.

0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
16 mai 2019 à 17:57
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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)
0
Whismeril Messages postés 18416 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 juin 2023 624
22 mai 2019 à 15:45
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.
-1