begin process at 2012 02 11 05:50:47
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

.NET

 > [C#] TRIER UNE LISTE

[C#] TRIER UNE LISTE


 Information sur le tutoriel

Note :
8,29 / 10 - par 7 personnes
8,29 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Tutorial

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'interet 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 tutorial 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 herite 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);

Eh 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 tete.

Commentaires

Commentaire de brico07 le 03/05/2007 17:47:08

salut!
très intérréssant comme tutoriel, bravo et du courage!!!

Commentaire de ffmic86 le 18/04/2008 11:53:31

Bon à savoir! ^^

Commentaire de gabs77 le 29/04/2008 11:49:03

Salut,
je me suis appuyer dessus pour l'adapter a mon programme mais cela ne fonctionne pas !!
Est ce que je me suis trompé quelque part ????

public struct MyScore
{
int score;
string name;
}


public class intComparer : IComparer
{

  public int Compare(object x, object y)
  {
    if (x is MyScore && y is MyScore)
    {
      MyScore X = (MyScore)x;
      MyScore Y = (MyScore)y;
  
      if(X.score < Y.score)
        return -1;

      if(X.score > Y.score)
        return 1;
    }
    else
    {
      if((int)x < (int)y)
        return -1;

      if((int)x> (int)y)
        return 1;
    }

    return 0;
  }

}

Commentaire de jeandanielgasser le 24/08/2008 13:56:29

Salut !
Merci pour ce tutorial qui m'a été utile pour me rafraîchir les idées.

Par contre j'aurai plutôt implémenté la fonction Compare de la classe intComparer comme ceci :

public int Compare(object x, object y)
{
  return(x.CompareTo(y));
}

A+

Commentaire de ahaccoun le 15/09/2008 22:36:43

Il me semble, que pour le code fonctionne, il faudrait mettre :

   public class intComparer : IComparer<object>

a la place de :

   public class intComparer : IComparer

Commentaire de janfran3 le 25/04/2010 10:42:20

Merci beaucoup, ça fonctionne nickel et c'est très utile!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales