IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

recherche un exemple de methode de tri (alphabetique) sur une collection


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 696
    Par défaut recherche un exemple de methode de tri (alphabetique) sur une collection
    bonjour !
    voila, j'aimerais trier une collection lesMatieres par ordre alphabetique sur son champs libMatiere.
    j'ai créé le code suivant :

    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
    22
    23
    public void TriMatieres()
            {
                ArrayList TabTri = new ArrayList();
                TabTri = GetListeMatieres();
                int nbMatieres = GetNbMatieres();
                int i, j;
                string nomObjet;
     
                for (i = 0; i <= (nbMatieres - 1); i++)
                {
                    for (j = (nbMatieres - 1); j <= i + 1; j++)
                    {
                        if (((ClMatiere)TabTri[j]).GetLibMatiere() < ((ClMatiere)TabTri[i+1]).GetLibMatiere())
                        {
                            ClMatiere Matiere1 = ((ClMatiere)TabTri[j]);
                            ClMatiere Matiere2 = ((ClMatiere)TabTri[j-1]);
     
                            ((ClMatiere)TabTri[j]) = Matiere2;
                            ((ClMatiere)TabTri[j-1]) = Matiere1;
                        }
                    }
                }
            }
    j'ai 2 problemes.
    le premiere est que c# interdit de comparer 2 chaines par (<) alors qu'il m'est indispensable de savoir si une chaine est inferieur à une autre dans l'ordre alphabétique.

    la deuxieme vient de ce morceau de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ClMatiere Matiere1 = ((ClMatiere)TabTri[j]);
    ClMatiere Matiere2 = ((ClMatiere)TabTri[j-1]);
     
    ((ClMatiere)TabTri[j]) = Matiere2;
    ((ClMatiere)TabTri[j-1]) = Matiere1;
    l'echange ne fonctionne pas.

    pourriez-vous m'aider svp ?

    merci

  2. #2
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    le premiere est que c# interdit de comparer 2 chaines par
    2- Utilise une Liste plutot qu'un arraylist
    3- Definit un comparer et tu trie comme tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List.Sort(MonComparerInstance);

  3. #3
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    tu pourrais le faire facilement si :
    - tu implémentais IComparable dans ta classe matière et redéfinissais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public override int CompareTo(object obj)
    {
    //Comparaison de string renvoie -1 ou 0 ou 1
    return nomMatière.CompareTo((obj as Matière).NomMatière);
    }
    dans ton code tu n'aurais qu'à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<Matière> matières = new List<Matières>(GetListeMatieres());
    matières.Sort();
    enfin je trouve ça plus simple...

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Par défaut
    Bonjour,

    J'utilise aussi cette methode et je la conseil également car elle fonctionne très bien !

Discussions similaires

  1. Comment effectuer un tri alphabetique avec une macro
    Par alexistak dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 14/02/2008, 18h32
  2. Tri alphabetique dans une representation intervallaire
    Par bomber dans le forum Langage SQL
    Réponses: 10
    Dernier message: 18/10/2007, 16h31
  3. tri alphabétique sur une collection
    Par samtheh dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/06/2007, 14h50
  4. [Tableaux] Tri alphabétique sur des colonnes d'un tableau html
    Par arnaudperfect dans le forum Langage
    Réponses: 1
    Dernier message: 02/04/2007, 15h51
  5. Réponses: 2
    Dernier message: 08/04/2004, 16h30

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