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

VB.NET Discussion :

[VB.Net] Comment effectuer Tri d'un tableau de Structures ?


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 29
    Points
    29
    Par défaut [VB.Net] Comment effectuer Tri d'un tableau de Structures ?
    Hello a tous.

    J'ai un petit souci dans l'utilisation de VB.Net
    Je m'explique...
    J'ai créer une structure qui s'appelle video.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Structure Video
            Dim titreVideo As String
            Dim dateSortie As Date
            Dim genreFilm As String
            Dim noteQualite As Byte
        End Structure
    Puis j'ai créé un tableau de cette structure.
    Je souhaiterais pouvoir effectuer un tri par un de ces champs.
    Je sais qu'en php, il est possible d'utiliser la valeur d'une variable pour en declarer une autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $maVariable = $var{$numero}
    Est-ce qu'il est possible de faire qqch dans le genre en vb.net?

    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tableauVideo.{typeTri}
    'j'ai essayer de cette maniere mais cela ne fonctionne pas...
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Tu travailles sous quel Framework ? (1.0, 1.1, 2.0) ?

    Par exemple sous 2.0, j'aurais plutôt opté pour une classe Video, plus implementation d'une collection Generics VideoList
    (Inherits List(Of Video))
    avec surcharge de la méthode Sort avec les IComparer adaptés
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    ben je suis assez d'accord avec toi sur le fait d'utiliser une classe!
    Mais le prob c'est que mon prof prefere d'abord qu'on se familiarise avec les structure... :S

    Donc c'est justemement ca mon prob je dois rester avec une structure...
    Par contre, j'aurais aussi voulu eviter de devoir faire une surcharge de fonction en en ayant une pour chaque "type de tri". J'aurais prefere avoir une fonction qui permette comme je l'ai dit de trier en fonction d'un parametre.

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok, mais tu ne m'as toujours pas repondu sur ta version de Framework :
    Sinon ici tu fais un peu plus que te familiariser avec la notion de structure, car il va te falloir surtout manipuler un Array, ses méthodes Shared Sort(), et les IComparer pour implementer le tri, sans oublier il me semble System.Reflection pour que le tri se fasse dynamiquement en fonction du nom d'un champs.

    A moins que tu puisses distinguer d'une part ton Array Of Video en tant que groupe de données et d'autre part la couche graphique (affichage) Un DataGrid avec comme DataSource une DataTable qui elle sera très facile à manipuler pour le tri, il te suffira donc de peupler la DataTable correctement avec le Tableau de Videos. Pour le faire de façon generique, System.Reflexion me semble toujours indiqué.
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    pour la version de framework, je suis desole j'ai oublie d'y repondre. Je suis en 2.0.

    Sinon pour le tri c'est aussi une partie du "projet". Il faut y integrer une des methode de tris (a bulle, insertion, fusion,...) donc je peux pas utiliser une fonction de vb permettant de le faire. c'est justement pour ca que je souhaiterais éviter de faire 4 procedures de tri differentes, et plutot utiliser une seule procedure ou je pourrais passer le champ (sur lequel tri doit etre fait) en parametre.

    Si jamais j'ai mis ma procedure de tri.

    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
     
        Sub sortVideoBy()
            Dim compteur As Integer = 0
            Dim indiceCell As Integer = 0
            Dim videoTemp As Video
     
            For compteur = tableauVideo.GetLength(0) - 1 To 1 Step -1
     
                For indiceCell = 0 To tableauVideo.GetLength(0) - 2 Step +1
                    If (tableauVideo(indiceCell).titreVideo <> "" And tableauVideo(indiceCell + 1).titreVideo <> "") Then
     
                        'et je souhaiterais pouvoir changer cette ligne en ayant qqch du genre If (tableauVideo(indiceCell).champAtrier< tableauVideo(indiceCell + 1).champAtrier) Then
                        If (String.Compare(tableauVideo(indiceCell).titreVideo, tableauVideo(indiceCell + 1).titreVideo) > 0) Then
     
     
                            videoTemp.titreVideo = tableauVideo(indiceCell).titreVideo
                            videoTemp.dateSortie = tableauVideo(indiceCell).dateSortie
                            videoTemp.noteQualite = tableauVideo(indiceCell).noteQualite
                            videoTemp.genreFilm = tableauVideo(indiceCell).genreFilm
     
                            tableauVideo(indiceCell).titreVideo = tableauVideo(indiceCell + 1).titreVideo
                            tableauVideo(indiceCell).genreFilm = tableauVideo(indiceCell + 1).genreFilm
                            tableauVideo(indiceCell).noteQualite = tableauVideo(indiceCell + 1).noteQualite
                            tableauVideo(indiceCell).genreFilm = tableauVideo(indiceCell + 1).genreFilm
     
                            tableauVideo(indiceCell + 1).titreVideo = videoTemp.titreVideo
                            tableauVideo(indiceCell + 1).genreFilm = videoTemp.genreFilm
                            tableauVideo(indiceCell + 1).noteQualite = videoTemp.noteQualite
                            tableauVideo(indiceCell + 1).genreFilm = videoTemp.genreFilm
     
                        End If
                    End If
                Next
     
            Next compteur
        End Sub

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    mouais quel interêt d'utiliser DotNet alors pour demontrer que tu sais faire un algo de tri :
    Si tu veux juste çà je pense que le Forum Algorithme aurait dû te suffire
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par neguib
    mouais quel interêt d'utiliser DotNet alors pour demontrer que tu sais faire un algo de tri :?: :?
    Les joies des exercices en cours :)


    Sinon à défaut de pouvoir utiliser les méthodes de tri de .NET, rien m'empêche de s'en inspirer.
    Il suffit que la méthode de tri prenne en paramètre un objet implémentant IComparer. C'est lui qui s'occupera de comparer tel ou tel champ. Le reste de la méthode peut appliquer l'algo de tri qu'on veut, en déléguant les comparaisons à l'objet IComparer.
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Maniak
    Citation Envoyé par neguib
    mouais quel interêt d'utiliser DotNet alors pour demontrer que tu sais faire un algo de tri :
    Les joies des exercices en cours
    C'est exactement ca!

    Citation Envoyé par Maniak
    Sinon à défaut de pouvoir utiliser les méthodes de tri de .NET, rien m'empêche de s'en inspirer.
    Il suffit que la méthode de tri prenne en paramètre un objet implémentant IComparer. C'est lui qui s'occupera de comparer tel ou tel champ. Le reste de la méthode peut appliquer l'algo de tri qu'on veut, en déléguant les comparaisons à l'objet IComparer.
    Justement c'est un peu ca mon probleme! Tu aurais une idee de comment faire?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par bob.marley
    Citation Envoyé par Maniak
    Sinon à défaut de pouvoir utiliser les méthodes de tri de .NET, rien m'empêche de s'en inspirer.
    Il suffit que la méthode de tri prenne en paramètre un objet implémentant IComparer. C'est lui qui s'occupera de comparer tel ou tel champ. Le reste de la méthode peut appliquer l'algo de tri qu'on veut, en déléguant les comparaisons à l'objet IComparer.
    Justement c'est un peu ca mon probleme! Tu aurais une idee de comment faire?
    Euh oui.
    Tu fais une méthode de tri qui prend en paramètre un objet implémentant IComparer. C'est lui qui s'occupera de comparer tel ou tel champ. Le reste de la méthode peut appliquer l'algo de tri que tu veux, en déléguant les comparaisons à l'objet IComparer.

    (vague impression de déjà-vu :)


    (si tu veux le code lui-même pour faire tout ça, va falloir chercher un peu hein. ça reste un exercice :)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    ok merci! Je vais essayer de mettre ca au point!

    Merci infiniment!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/07/2006, 11h23
  2. [VB.Net]Comment effectuer l'Authentification LDAP ?
    Par le Daoud dans le forum VB.NET
    Réponses: 6
    Dernier message: 28/02/2006, 10h09
  3. [VB.NET] Comment effectuer le Checksum de Bytes ?
    Par alx3d dans le forum VB.NET
    Réponses: 4
    Dernier message: 09/02/2006, 10h52
  4. Réponses: 4
    Dernier message: 25/10/2005, 14h06

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