1. #1
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 188
    Points : 85
    Points
    85

    Par défaut Tri d'une List<> sur 2 critères

    Bonjour,

    Je souhaite trier une liste selon 2 critères.
    J'ai trouvé un code sur MSDN qui marche bien, mais seulement sur un critère.
    Voici le code :
    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
     
     class Personne
        {
            private string nom;
            private int age;
     
            public Personne(string nom, int age)
            {...  }
     
     
     
            public override String ToString()
            {...     }
     
           ...
            }
        }
    Classe Forum :
    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
     
    class Forum
        {
            private List<Personne> personnes;
     
            public Forum()
            {
                this.personnes = new List<Personne>();
            }
     
            public void Inscrire(Personne personne)
            {
                this.personnes.Add(personne);
            }
     
            public IEnumerable<Personne> TriParNomEtAge()
            {        
     
                return personnes.OrderBy(per => per.Age);
            }
        }
    et mon main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    static void Main()
            {
                Forum unForum = new Forum();
                unForum.Inscrire(new Personne("Dupont", 8));
                unForum.Inscrire(new Personne("Dupont", 4));
                unForum.Inscrire(new Personne("Milou", 1));
                IEnumerable<Personne> lesPersonnes = unForum.TriParNomEtAge();
                foreach (Personne p in lesPersonnes)
                {
                    Console.WriteLine(p);
                }
                Console.ReadKey();           
            }
    Le résultat est celui attendu. J'ai aussi essayé de trier sur le nom, ça marche bien.
    J'aurais aimé pourvoir trier sur le nom ET l'âge pour avoir le résultat :
    Dupont - 4
    Dupont - 8
    Milou - 1


    Par ailleurs, j'ai essayé le cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public List<Personne> TriParNomEtAge()
            {        
     
                return (List<Personne>) personnes.OrderBy(per => per.Nom);
            }
    mais ça a planté à l'exécution.
    Merci pour vos conseils. Si il y a mieux comme solution, je suis preneur.

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2011
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mars 2011
    Messages : 1 817
    Points : 3 397
    Points
    3 397

    Par défaut

    Salut,

    Linq propose la méthode ThenBy.

    C'est vraiment cradingue ce Linq
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .Net et Delphi
    Inscrit en
    juillet 2002
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .Net et Delphi
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2002
    Messages : 631
    Points : 1 430
    Points
    1 430

    Par défaut

    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return personnes.OrderBy(per => per.Nom).ThenBy(per => per.Age);

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net et Delphi
    Inscrit en
    juillet 2002
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .Net et Delphi
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2002
    Messages : 631
    Points : 1 430
    Points
    1 430

    Par défaut

    Citation Envoyé par jopopmk Voir le message
    C'est vraiment cradingue ce Linq
    Bien d'accord, heureusement qu'il y a un GC ! (remarque je dis ça mais Linq, j'en abuse...)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 188
    Points : 85
    Points
    85

    Par défaut

    Merci beaucoup pour vos réponses, ça marche bien et on peut enquiller les ThenBy.
    Y a-t-il une alternative ?
    Peut-on convertir la Ienumerable<> en List<>?
    Merci encore

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .Net et Delphi
    Inscrit en
    juillet 2002
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .Net et Delphi
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2002
    Messages : 631
    Points : 1 430
    Points
    1 430

    Par défaut

    Citation Envoyé par loustalet Voir le message
    Peut-on convertir la Ienumerable<> en List<>?
    Merci encore
    Oui avec .ToList()

    (de rien)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 188
    Points : 85
    Points
    85

    Par défaut

    Merci beaucoup, tout est nickel.

  8. #8
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 333
    Points : 4 555
    Points
    4 555
    Billets dans le blog
    5

    Par défaut

    Bonjour,

    Citation Envoyé par loustalet Voir le message
    Y a-t-il une alternative ?
    Oui, tu peux utiliser la méthode Sort sur une liste. Il existe une surcharge prenant un paramètre permettant de préciser le comparateur à utiliser.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

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

Discussions similaires

  1. Tri d'une liste d'objets en se basant sur leurs attributs
    Par freestyler1982 dans le forum Langage
    Réponses: 11
    Dernier message: 22/11/2007, 15h33
  2. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  3. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 08h46
  4. [TRI] tri d'une list provenant de LabelValueBean
    Par Canou dans le forum Struts
    Réponses: 6
    Dernier message: 20/09/2004, 14h55
  5. tri d'une liste
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2003, 18h08

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