Comment faire une recherche de doublons d'une collection ?

Résolu
Duke49 Messages postés 550 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 6 juin 2015 - 3 janv. 2011 à 17:45
Duke49 Messages postés 550 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 6 juin 2015 - 3 janv. 2011 à 19:48
Salut à tous !
Bonne année et bonne santé !

Explication, j'ai une liste:
0 = A
1 = B
2 = A
Effet désiré, suppression doublons:
0 = A
1 = B

Voilà mon bout de code (non fonctionnel):
Dim FIND_COLLECTION As List(Of Object)
Dim i as Integer = 0

FIND_COLLECTION.Add("A")
FIND_COLLECTION.Add("B")
FIND_COLLECTION.Add("A")

   While i < FIND_COLLECTION.Count
      If FIND_COLLECTION.Item(i).Count > 1 then
         FIND_COLLECTION.RemoveAt(i)
      Else
         i += 1
      End If
   End While



PS: un bug visual basic 2010 assez symatoche (gros plantage) ;
1) Mettez ceci dans un bouton:
Dim FIND_COLLECTION As List(Of Object)
Dim enu As New List(Of Object).Enumerator
2) Mettez un point d'arrêt dessus
3) Valider une fois la touche F8
4) Faite CTRL+G pour aller dans la fenêtre d'exécution
5) Mettez ceci: enu = FIND_COLLECTION.item(0)
6) Appuyez sur entrer ^^ MDR

3 réponses

Utilisateur anonyme
3 janv. 2011 à 18:42
Bonsoir,
Le meilleur moyen pour éviter d'avoir des doublons dans une collection c'est de tester si elle contient déjà un élément similaire au moment de l'ajout.
Dim FIND_COLLECTION As New List(Of Object)

Dim ListeElements() As String = {"A", "B", "B", "A"}

For Each Element As String In ListeElements
    If Not FIND_COLLECTION.Contains(Element) Then
        FIND_COLLECTION.Add(Element)
    End If
Next


Bonne nuit
3
Duke49 Messages postés 550 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 6 juin 2015 4
3 janv. 2011 à 19:20
Effectivement tu as entièrement raison.
C'est d'une logique implacable, merci beaucoup banana32.

Même si tu me fournis le top de la logique...
Pour des raisons de choix je devais le faire.
J'ai trouver comment m'y prendre avec une méthode à l'ancienne ^^
Ne sachant toujours pas si il existe une méthode .NET je vais cependant la partager.
++
Dim FIND_COLLECTION As New List(Of Object)
Dim i As Integer = 0
Dim j As Integer = 0

                While i < FIND_COLLECTION.Count
                    curList = FIND_COLLECTION.Item(i)
                    For j = 0 To FIND_COLLECTION.Count - 1
                        If FIND_COLLECTION.Item(j) = curList Then
                            If i <> j Then FIND_COLLECTION.RemoveAt(j)
                        End If
                    Next
                    i += 1
                End While
0
Duke49 Messages postés 550 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 6 juin 2015 4
3 janv. 2011 à 19:48
Correction méthode vb6:
                While i < FIND_COLLECTION.Count
                    curList = FIND_COLLECTION.Item(i)
                    While j < FIND_COLLECTION.Count
                        If FIND_COLLECTION.Item(j) = curList Then
                            If i <> j Then
                                FIND_COLLECTION.RemoveAt(j)
                                j = -1
                            End If
                        End If
                        j += 1
                    End While
                    j = 0
                    i += 1
                End While
0