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
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
- 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
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
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
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022
151
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
2629
Date d'inscription
samedi 11 janvier 2014
Statut
Modérateur
Dernière intervention
13 mai 2022
151
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
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
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
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
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
17326
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
596
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.
0