Comment faire une recherche de doublons d'une collection ? [Résolu]

Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 3 janv. 2011 à 17:45 - Dernière réponse : Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention
- 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
Afficher la suite 

3 réponses

Répondre au sujet
Utilisateur anonyme - 3 janv. 2011 à 18:42
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 3 janv. 2011 à 19:20
0
Utile
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
Commenter la réponse de Duke49
Duke49 553 Messages postés jeudi 12 octobre 2006Date d'inscription 6 juin 2015 Dernière intervention - 3 janv. 2011 à 19:48
0
Utile
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
Commenter la réponse de Duke49

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.