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 :

Tri sur une list(of) avec classe perso


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté 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
    Par défaut Tri sur une list(of) avec classe perso
    Bonjour et bon lundi!

    J'aimerais faire un tri sur une list. Voici ma structure pour vous mettre en contexte:

    J'ai une classe "Activité" qui contient les infos d'une activité, avec son temps de départ (integer)

    J'ai une classe "Projet" qui contient les infos du projet, ainsi que sa liste d'activité (List(of Activité))

    J'ai un module "ManagerProjet" qui contient une liste de projet (List(of Projet))

    J'aimerais faire un tri sur la liste de projet du "ManagerProjet", selon les temps de départ de l'activité 0 (soit la première activité de chaque projet), un peu comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListDeProjet.Sort(Sur Projet.ListActivité(0).Début)
    Y'a moyen de faire quelquechose du genre, ou devrais coder une fonction dans la classe projet qui me retourne le temps de départ? Ou autres idées?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    tu peux implémenter un IComparer qui fait ça

  3. #3
    Membre expérimenté 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
    Par défaut
    Ouais en lisant sur MSDN j'ai vu ça aussi, je connais pas par contre, je m'y mets!

  4. #4
    Membre expérimenté 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
    Par défaut
    Je suis en VS 2008 en passant, ça peut commencer à être important...

    Bon j'ai essayé ceci:

    J'ai créé ma classe comparatrice:

    ActiveList = Liste de Projet
    TaskList = Liste d'activité


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class SortListClass
        Implements IComparer
     
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
            Return New CaseInsensitiveComparer().Compare(ActiveList(x).TaskList(0).StartTime, ActiveList(y).TaskList(0).StartTime)
        End Function
    End Class
    Ensuite j'ai utilisé cette classe pour faire mon tri:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Sub SortActiveList()
            Dim MyComparer As New SortListClass
            ActiveList.Sort(MyComparer)
        End Sub
    Il me lance une erreur de Cast par contre ( sur la ligne ActiveList.Sort(MyComparer))

    Unable to cast object of type 'GanttChartScheduling.SortListClass' to type 'System.Collections.Generic.IComparer`1[GanttChartScheduling.Basket]'.
    GanttChartScheduling.Basket = Classe de Projet (panier d'activité pour notre code...)

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    oula, je suis un peu perdu dans ton truc... a priori, les paramètres x et y sont des projets, non (apparemment tu as supposé que c'était des index ?) ? Avec un cast on y verrait plus clair...
    Et pourquoi utiliser CaseInsensitiveComparer pour comparer des dates ?
    Moi je ferais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class SortListClass
        Implements IComparer
     
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
            Dim projX as Projet = TryCast(x, Projet)
            Dim projY as Projet = TryCast(y, Projet)
            Dim startX As DateTime = projX.TaskList(0).StartTime        
            Dim startY As DateTime = projY.TaskList(0).StartTime
            Return DateTime.Compare(startX, startY)        
        End Function
    End Class

  6. #6
    Membre expérimenté 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
    Par défaut
    Ouais désolé c'est mélangeant pour quelqu'un qui ne baigne pas dans mon truc, c'Est pas vraiment des projets, j'avais utilisé ça pour faire une comparaison..

    Citation Envoyé par tomlev Voir le message
    oula, je suis un peu perdu dans ton truc... a priori, les paramètres x et y sont des projets,
    En créant la classe et implémentant IComparer, il a créer la fonction automatiquement avec le x et le y. D'Après moi, étant caster Object, c'est n'importe quoi, moi dans mon cas, je veux trier la liste de paniers (projet), donc il y a une classe pour ça, soit Basket, mais je ne peux pas identifier ça bug

    non (apparemment tu as supposé que c'était des index ?) ?
    Je crois bien qu'il va prendre l'objet x et y dans son tri, soit le panier actif x et y, puis trier selon le temps de départ

    Avec un cast on y verrait plus clair...
    Et pourquoi utiliser CaseInsensitiveComparer pour comparer des dates ?
    Honnêtement je savais pas quoi utiliser, par contre oublie pas que c'est pas des dates mais bien des Integer (c'est des secondes)

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

Discussions similaires

  1. Tri sur une liste chainée
    Par Leclandestin dans le forum C++
    Réponses: 5
    Dernier message: 21/03/2011, 18h22
  2. [FORMULAIRE]Tri sur une liste dans un formulaire Access
    Par roidesizzets dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/06/2009, 12h35
  3. Tri sur une liste d'objet
    Par Poussy-Puce dans le forum C#
    Réponses: 4
    Dernier message: 12/05/2008, 17h35
  4. tri sur une list
    Par lastrecrue dans le forum C++
    Réponses: 2
    Dernier message: 18/04/2007, 08h44

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