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 :

Trier un ArrayList de class


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut Trier un ArrayList de class
    Bonjour
    J'ai crée une class Test
    elle contient la propriété id
    j'ai Implémente l'Icomparable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Implements IComparable(Of Test)
    et la fonction de comparaison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Public Function CompareTo(ByVal other As Test) As Integer _
            Implements System.IComparable(Of Test).CompareTo
                ' Compare this ones name with the other ones name.
                ' return <0 if this one comes first,
                ' 0 if they are equal,
                ' >0 if the other one comes first.
                ' String.Compare does this anyway
                Return String.Compare(Me.Id, other.Id)
            End Function
    J'ai maintenant une variable de type arraylist, qui contient une liste de Test
    Je veux savoir comment faire l'appel de la méthode de tri, pour trier suivant la propriété id?
    Merci

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Appelle simplement la méthode Sort sur l'ArrayList

    Par contre je suis pas sûr que ça marche en implémentant l'interface générique IComparable(Of T), vu que la classe ArrayList n'est pas générique. Tu as une raison particulière d'utiliser ArrayList plutôt que List(Of T) ?

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut
    Je suis obligé à utiliser ce ArrayList (ancien Code)
    Sinon comment je fais l'appel de Sort en connaissant la fonction que j'ai ajouté à ma classe?

  4. #4
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par DeveloppeurWeb Voir le message
    Je suis obligé à utiliser ce ArrayList (ancien Code)
    Je vois pas le rapport... le "vieux" code n'est pas obligé de rester vieux. Tu peux très bien remplacer l'ArrayList par une List(Of Test), ça n'a que des avantages.

    Citation Envoyé par DeveloppeurWeb Voir le message
    Sinon comment je fais l'appel de Sort en connaissant la fonction que j'ai ajouté à ma classe?
    Bah y a rien de spécial, tu fais juste taListe.Sort()

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2010
    Messages : 366
    Points : 121
    Points
    121
    Par défaut
    Si Je vais faire taListe.Sort()
    Je vais trier la liste c'est vrai, mais je n'ai pas précisé sur quel propriété
    Chaque item peut avoir plusieurs propriétés (id,nom, prenom)
    Je veux par exemple trier suivant Nom

  6. #6
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par DeveloppeurWeb Voir le message
    Je vais trier la liste c'est vrai, mais je n'ai pas précisé sur quel propriété
    Ca va trier selon la méthode CompareTo que tu as implémentée

    Si tu veux pouvoir trier selon différentes propriétés, il faut passer une classe qui implémente IComparer(Of Test) en paramètre de Sort.

    Par exemple, pour trier par nom :

    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
    Class TestNomComparer
    	Implements IComparer(Of Test)
    	Public Function Compare(x As Test, y As Test) As Integer
    		If x Is Nothing AndAlso y Is Nothing Then
    			Return 0
    		ElseIf x Is Nothing Then
    			Return -1
    		ElseIf y Is Nothing Then
    			Return 1
    		Else
    			Return String.Compare(x.Nom, y.Nom)
    		End If
    	End Function
    End Class
     
    ...
     
    ' Tri par nom
    liste.Sort(new TestNomComparer())
    Par contre si la liste est de type ArrayList, il faut implémenter IComparer et non IComparer(Of Test). C'est pareil sauf que les paramètres sont de type Object au lieu d'être fortement typés (et donc c'est un peu plus chiant à implémenter...)

Discussions similaires

  1. Trier un arrayList selon differents criteres
    Par TangoZoulou dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 07/05/2009, 11h05
  2. ArrayList<String>.class ? or getClass().getLiteralClass() ?
    Par yakamax dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/03/2009, 10h33
  3. Réponses: 35
    Dernier message: 28/10/2008, 10h11
  4. trier une arraylist selon un critère
    Par marion5515 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 15/03/2008, 20h25
  5. Tableau ArrayList de classe
    Par helico2 dans le forum C++/CLI
    Réponses: 1
    Dernier message: 10/06/2007, 19h01

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