Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[C#] TRIER UNE LISTE


Information sur le tutorial

Catégorie :.NET Tutorial .NET ( DotNet ) Date de création : 05/08/2004 10:23:37 Vu : 25 396 fois

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

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.

signaler à un administrateur
Commentaire de brico07 le 03/05/2007 17:47:08

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

signaler à un administrateur
Commentaire de ffmic86 le 18/04/2008 11:53:31

Bon à savoir! ^^

signaler à un administrateur
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;
  }

}

signaler à un administrateur
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+

signaler à un administrateur
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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,016 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.