[C#] TRIER UNE LISTE

cs_brico07 61 Messages postés jeudi 12 avril 2007Date d'inscription 16 mai 2012 Dernière intervention - 3 mai 2007 à 17:47 - Dernière réponse : Whismeril 11412 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention
- 24 août 2017 à 17:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/faq/45-c-trier-une-liste

Afficher la suite 
janfran3 3 Messages postés mercredi 2 décembre 2009Date d'inscription 25 avril 2010 Dernière intervention - 25 avril 2010 à 10:42
Merci beaucoup, ça fonctionne nickel et c'est très utile!
on peut utiliser LINQ pour trier la liste, c'est plus simple :
list.OrderBy(x=> x)

http://www.code-source.net/Forums/Sujets/utiliser-linq-pour-trier-une-liste
Whismeril 11412 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention > Wassim - 4 oct. 2015 à 17:17
Bonjour, il faut prendre en compte que quand ce tuto a été écrit, Linq n'existait pas.
Rendre une classe comparable peut rester utile malgré Linq.
boissonnfive 420 Messages postés mercredi 20 décembre 2000Date d'inscription 24 août 2017 Dernière intervention - 24 août 2017 à 16:30
Bonjour,
je ne comprends pas l'objet de cet article. Le tri (méthode Sort() ) est déjà implémenté pour les types de base (int, string, double, etc) dans les ArrayList ou les List<T>.

Par contre, il est nécessaire d'implémenter une interface de comparaison si on a une liste d'objets qu'on a créés nous-même.
Imaginons que nous avons créé une classe Personne avec un nom et un âge.

class Personne
{
    public string nom;
    public string age;
    public Personne(string _nom, int _age)
    {
	nom = _nom;
	age = _age;
    }
}


Si on crée une liste de X Personnes avec des âges différents et qu'on doit trier cette liste en fonction de l'âge des personnes, il faut écrire quelque chose comme ça :

public class PersonneAgeComparer : IComparer // cette classe hérite de IComparer.
                                                            // c'est cette classe qui est appelée par 
                                                            // les méthodes de tri pour savoir comment 
                                                            // comparer les éléments
{
    public int Compare(object o1, object o2) // la méthode de comparaison : 
                                                                // elle est forcément déclarée comme cela
    {
           if ( ((Personne) o1).age < ((Personne) o2).age) // On compare les âges des personnes
                return -1;
	    if ( ((Personne)o1).age > ((Personne)o2).age )
	        return 1;
	return 0; // eh oui, si les éléments sont égaux on ne va pas s'amuser à les trier, 
						  // donc on retournera 0 :-D
    }
}


myAL.Add(new Personne("Bruno", 3));
myAL.Add(new Personne("Marc", 12));
myAL.Add(new Personne("Rémy", 4 ));
myAL.Add(new Personne("Marine", 8 ));
myAL.Add(new Personne("Dany", 56 ));
myAL.Add(new Personne("Inconnu", 0 ));

//myAL.Sort(); // Renvoie une exception si on n'implémente pas IComparer

System.Collections.IComparer myComparer = new PersonneAgeComparer();
myAL.Sort(myComparer); // OK




Whismeril 11412 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention > boissonnfive 420 Messages postés mercredi 20 décembre 2000Date d'inscription 24 août 2017 Dernière intervention - 24 août 2017 à 17:22
Oui c'est exactement ce que décrit le tuto. Tu l'a lu avant de poster?
Commenter la réponse de cs_brico07

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.