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 :

Trie par propriété d'objet dans une collection


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut Trie par propriété d'objet dans une collection
    Bonjour,

    j'ai une liste d'objets, je voudrais trier cette liste par ordre alphabétique sur la propriété Title de mon object ActivityEntity.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<ActivityEntity> v_activities = BizActivities.GetActivities(LanguageId);

    Est ce qu'il exsite une méthode permettant le trie ou dois-je faire une méthode moi meme?

    la méthode à faire serait la suivante;

    1. créer une liste de String avec ma liste d'objet "ActivityEntity" et récupérant la propriété que je veux.
    2. je fais un Sort() sur ma nouvelle liste, elle est donc trié.
    3. je crée une nouvelle liste d'objet "ActivityEntity" en comparant ma liste trié avec "v_activities".

    ceci vous semble t'il correcte?

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2005
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 218
    Par défaut
    Si tu veux qu'un objet soit triable, il faut lui faire implémenter l'interface Icomparable et ajouter la méthode exemple suivante :

    Exemple de comparaison d'un utilisateur, par son nom, puis par son pré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
     
    public int CompareTo(object LAutre)
            {
                if (LAutre.GetType() != this.GetType())
                    throw new Exception("l'object de type " + LAutre.GetType() + " non comparable avec un object de type " + this.GetType());
                else
                {
                    Utilisateur _LAutreUtilisateur = (Utilisateur)LAutre;
                    if (this.Nom != null && this.Nom != _LAutreUtilisateur.Nom)
                        return this.Nom.CompareTo(_LAutreUtilisateur.Nom);
                    else if (this.Prenom != null && this.Prenom != _LAutreUtilisateur.Prenom)
                        return this.Prenom.CompareTo(_LAutreUtilisateur.Prenom);
                    else
                        throw new Exception("Données incorrectes");
                }
            }

  3. #3
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    je viens de faire ceci, et ca fonctionne.
    je devrais plutot utiliser ce que tu viens de me montrer c'est surement plus efficace et plus propre.

    A quel moment fais tu l'appelles de ta méthode?




    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
     
    public static List<ActivityEntity> TriAlphabetiqueDeActivityEntityTitle(List<ActivityEntity> list)
            {
                List<String> listTitle = new List<string>();
                List<ActivityEntity> listAE = new List<ActivityEntity>();
     
                foreach (ActivityEntity item in list)
                {
                    listTitle.Add(item.Title);
                }
     
                listTitle.Sort();
     
                foreach (String item in listTitle)
                {
                    bool b = false;
                    int i = 0;
                    while (!b)
                    {
                        if (item.Equals(list[i].Title))
                        {
                            b = true;
                            listAE.Add(list[i]);
                        }
                        i++;
                    }
                }
     
     
                return listAE;
     
            }

  4. #4
    Membre expérimenté
    Inscrit en
    Janvier 2005
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 218
    Par défaut
    La méthode CompareTo() ne s'appelle pas, mais génère automatiquement la fonction Sort() et Reverse() dans la collection.

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Il y a plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    activities.Sort(delegate(ActivityEntity a1, ActivityEntity a2) { return string.Compare(a1.Titre, a2.Titre); }); // C# 2
    activities.Sort((a1, a2) => string.Compare(a1.Titre, a2.Titre)); // C# 3
    Ne marche bien sûr que si tous les objets de ta liste sont non nulls.
    cf la MSDN : http://msdn.microsoft.com/fr-fr/libr...5z(VS.85).aspx

  6. #6
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    Merci pour vos explications

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

Discussions similaires

  1. [VB.NET] Suppression d'objets dans une collection
    Par master56 dans le forum VB.NET
    Réponses: 7
    Dernier message: 03/06/2010, 21h46
  2. [PHP 5.0] Stocker des objets dans une collection
    Par kaljerhom dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2009, 21h38
  3. Méthode non acceptée : ajout d'un objet dans une collection
    Par Nzs26 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 09/11/2007, 19h31
  4. Réccupération du type d'un objet dans une collection
    Par javacien dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 04/11/2007, 18h00
  5. Hibernate + suppression d'objets dans une collection
    Par Saiyan54 dans le forum Hibernate
    Réponses: 2
    Dernier message: 15/12/2006, 15h39

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