[c#] trier une liste

[c#] trier une liste

Normalement, en faisant de la programmation on en vient un jour ou l'autre à devoir trier des listes. Et heureusement pour nous, monsieur Microsoft nous a offert des méthodes de tri parfaitement efficaces et optimisées... si la structure de données à trier n'est pas trop compliquée ou spécifique (style vous êtes chercheur en IA et la plus petite structure de donnée que vous devez manipuler fait 1 Mo :-D).

L'intérêt de ces méthodes est donc qu'elles peuvent s'appliquer sur n'importe quelle structure que vous utilisez. Des exemples existent sur le site de Microsoft pour voir comment utiliser ces structures, mais il semblerait que beaucoup ne passent même pas le voir. Donc je propose un petit tutoriel de mon cru un poil plus court pour ce qui est de l'exemple.

Tout d'abord, il faut spécifier la manière dont votre programme doit comparer les éléments de votre liste. Ici on se casse pas la tête, ce seront des int qui seront comparés.
On fait donc :

public class intComparer : 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 x, object y) // la méthode de comparaison : 
                                                                // elle est forcément déclarée comme cela
    {
        if((int)x < (int)y) // bien penser à caster les objet dans la structure qui va être comparée
            return -1;
        if((int)x> (int)y)
            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
    }
}

La méthode de comparaison étant définie, il ne reste plus qu'a l'appeler quand on trie la liste. Supposons qu'on ait une ArrayList d'entier listeInt :

System.Collections.IComparer myComparer = new intComparer();

listeInt.Sort(myComparer);

Et voilà, votre liste sera triée.
Inutile donc d'en appeler au sacro saint quicksort que l'on doit programmer sois même en fonction de la structure à trier. D'une part parce qu'on a déjà ce qu'il faut ici, d'autre part parce qu'il y a des techniques d'optimisation de tri qui sont déjà implémentées et que tout le monde ne maîtrise pas forcément.
Donc à moins que le tri ne soit une phase critique de votre programme, dans quel cas il vous faudra faire un algo de tri spécifique à votre structure, voici comment trier n'importe quelle liste en quelques lignes sans se casser la tête.

Ce document intitulé « [c#] trier une liste » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous