IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Recherche doublons sur list


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Recherche doublons sur list
    Bonjour,

    J'ai une liste avec certains de propriétés en doublons. Je souhaiterai copier ces doublons dans une nouvelle liste mais conceptuellement j'ai un peu de mal .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
     
    Module Module1
     
        Sub Main()
     
            Dim ListeCdes As New List(Of Commande)
     
            ListeCdes.Add(New Commande("CDE1", "MAG1", "01/01/2008"))
            ListeCdes.Add(New Commande("CDE2", "MAG2", "01/01/2008"))
            ListeCdes.Add(New Commande("CDE3", "MAG2", "01/01/2008"))
            ListeCdes.Add(New Commande("CDE4", "MAG3", "01/01/2008"))
            ListeCdes.Add(New Commande("CDE5", "MAG4", "01/01/2008"))
     
            Dim sublist As List(Of Commande) = ListeCdes.FindAll(AddressOf GroupageCommandes)
     
            If sublist.Count > 1 Then
                For Each subcde As Commande In sublist
                    Console.WriteLine(subcde.Mag & vbTab & subcde.Delai & vbTab & subcde.NumCde)
                Next
                Console.WriteLine(sublist.Count.ToString & " commandes a grouper")
            Else
                Console.WriteLine("Aucune commande à grouper")
            End If
     
            Console.ReadLine()
     
        End Sub
     
        Function GroupageCommandes(ByVal Cde As Commande) As Boolean
            If Cde.Mag = "MAG1" And Cde.Delai = "01/01/2008" Then
                Return True
            Else
                Return False
            End If
        End Function
     
    End Module
    Je souhaite identifier toutes les commandes clients à grouper pour un même magasin et un même délai.

    Mon code me renvoie le bon résultat, mais de façon unitaire, comme défini dans mon prédicat. Je souhaiterai pouvoir le calculer sur toute la liste.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    je pense que le plus simple ici reste de faire 2 boucles imbriquées et cherches ainsi les doublons
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,
    je sais faire en c#, mais en vb...


    en C#:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    List<Commande> sublist = ListeCdes.FindAll(CommandesGroupees);
     
     
    ...
    ...
    public static Predicate<Commande> CommandesGroupees(string magasin, datetime delai) {
                return delegate(Commande cde) {
                        return ((cde.Mag == magasin) && (cde.Delai == delai));
                };
            }

    Je cherche en Vb sai j'ai 10 minutes

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  4. #4
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    ouch !!!

    en fait, en vb, c'est pas possible...pas de methodes anonymes...

    J'ai vu une methode pour arriver au meme resultat...
    http://www.paulstovell.com/blog/almo...sual-basic-net

    Mais bon, en fonction de ce que tu veux faire, c'est peut-etre un peu..barbare

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    Autre méthode:

    J'ai déjà eu à remplir une liste avec des valeurs que je retrouvais dans un fichier CSV. Afin de n'inclure que les valeurs une seule fois (donc éliminé les doublons), j'avais fait:

    1. Remplir la liste
    2. Mettre en ordre (.Sort = True)
    3. Scanner la liste (While)
    4. Éliminer la valeur suivante si elle était identique


    En code ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                'Sort des datas final en ordre alphabétique (c'est un champ texte, string)
                CBData.Sorted = True
     
                'Boucle qui élimine les doublons dans la liste
                While i < CBData.Items.Count - 1
                    If CBData.Items(i + 1) = CBData.Items(i) Then
                        CBData.Items.Remove(CBData.Items(i))
                        i = 0
                    Else
                        i += 1
                    End If
                End While
    J'espère que ça peut t'aider dans ton cas!!
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods


    JP

    Pour commencer en VB.Net: PLASSERRE!

    ou traducteur-sms.com

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Bonsoir à tous. Merci beaucoup pour vos réponses qui m'ont aidé à trouver une solution à mon problème .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    Module Module1
     
        Dim strMag As String = String.Empty
        Dim strDelai As String = String.Empty
     
        Sub Main()
     
            'Liste des commandes clients
            Dim ListeCdes As New List(Of Commande)
     
            ListeCdes.Add(New Commande("COMMANDE1", "MAGASIN1", "01/01/2008"))
            ListeCdes.Add(New Commande("COMMANDE2", "MAGASIN2", "02/01/2008"))
            ListeCdes.Add(New Commande("COMMANDE3", "MAGASIN2", "02/01/2008"))
            ListeCdes.Add(New Commande("COMMANDE4", "MAGASIN2", "01/01/2008"))
            ListeCdes.Add(New Commande("COMMANDE5", "MAGASIN3", "03/01/2008"))
     
            'Liste des commandes clients à grouper (même magasin, même délai)
            Dim ListeCdesGrp As New List(Of Commande)
     
            'Compteur
            Dim i As Integer = 0
     
            'Parcourir chaque commandes clients
            Do
                strMag = ListeCdes.Item(i).Mag
                strDelai = ListeCdes.Item(i).Delai
     
                'Rechercher les commandes à grouper suivant les conditions du prédicat
                Dim sublist As List(Of Commande) = ListeCdes.FindAll(AddressOf Groupage)
     
                'Ajouter les commandes trouvées à la liste des commandes à grouper et
                'supprimer ces commandes de la liste initiale
                If sublist.Count > 1 Then
                    ListeCdesGrp.AddRange(sublist)
                    ListeCdes.RemoveAll(AddressOf Groupage)
                End If
                i += 1
            Loop While i < ListeCdes.Count
     
            'Imprimer la liste des commandes à grouper
            If ListeCdesGrp.Count > 1 Then
                For Each Cde As Commande In ListeCdesGrp
                    Console.WriteLine(Cde.NumCde & vbTab & Cde.Mag & vbTab & Cde.Delai)
                Next
                Console.WriteLine("{0} commandes à grouper ", ListeCdesGrp.Count)
            Else
                Console.WriteLine("Aucune commande à grouper")
            End If
     
            Console.ReadLine()
        End Sub
     
        'Prédicat de recherche
        Function Groupage(ByVal Cde As Commande) As Boolean
            If Cde.Mag = strMag And Cde.Delai = strDelai Then
                Return True
            Else
                Return False
            End If
        End Function
     
    End Module

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Recherche doublons sur plusieurs colonnes
    Par David_18 dans le forum Access
    Réponses: 11
    Dernier message: 19/05/2014, 19h15
  2. Recherche doublons sur colonne
    Par MonSavon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/04/2014, 14h27
  3. [SP-2007] Champ de recherche basé sur list SP 2007
    Par foxmulder333 dans le forum SharePoint
    Réponses: 6
    Dernier message: 14/08/2012, 11h25
  4. recherche doublon dans liste
    Par pingouinos_64 dans le forum Général Python
    Réponses: 10
    Dernier message: 10/11/2011, 09h08
  5. [Oracle 8i]Recherche doublon sur une même table
    Par fmoriet dans le forum Oracle
    Réponses: 3
    Dernier message: 01/08/2006, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo