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 :

Trier "simplement" un ArrayList


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Trier "simplement" un ArrayList
    Bonjour à tous,

    Le c# me plait beaucoup, mais je dois dire que défois j'ai l'impression que tout ce nombre de classe est beaucoup trop important et je finit par m'y perdre, je me perdais moins en MFC

    Voila mon petit soucis, je possède un ArrayList avec x éléments.
    Je voudrais trier cet ArrayList en me basant sur les 2premier caractère de chaque élément

    Exemple :

    aeaaaaa
    aaaaaaa
    azaaaaa
    abaaaaa

    Qui donnerai :

    aaaaaaa
    abaaaaa
    aeaaaaa
    azaaaaa

    J'ai vu les fonction Sort avec le fameux Icomparer, mais je trouve cela assez compliqué et me demandait si il n'existait pas une méthode plus simple ? j'en suis d'ailleur étonné, j'ai toujours l'impression qu'il faut passer de x types vers x classes avant d'arriver à ce que l'on veux en c#

    Je vous remercie de l'attention que vous porterez à ce message.

    Cordialement,

    Nixeus

  2. #2
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    Bonjour,

    de ma part je trouve que Sort est plus simple de coder ça manuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ArrayList liste = new ArrayList();
                string[] alpha = new string[] { "aeaaaaa", "aaaaaaa", "azaaaaa", "abaaaaa"};
                liste.AddRange(alpha);
     
                Console.WriteLine("Nous rangeons la collection dans l'ordre :");
                liste.Sort();
     
                foreach (string item in liste)
                    Console.WriteLine(item);
     
                Console.Read();
    si j'ai bien compris ton besoin

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Salut,

    Merci de ta réponse rapide.

    Dans ton exemple tu fais le trie sur les éléments en entiers, et non sur les 2premiers caractères des éléments.

  4. #4
    Membre chevronné Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Par défaut
    ba je pense qu'il traite les 1er caractères au premier puis les 2ème, 3ème, ainsi de suite, du coup, ton besoin seras satisfait ici, puisque tu veux trier les 2 premiers caratères.
    Donc si on a par exemple les 2 chaines aeaaaaa et aadaaaa, elles seront triés de cette façon :

    aadaaaa
    aeaaaaa

    et pour ces 2 chaines aaaaaaa et aadaaaa :

    aaaaaaa
    aadaaaa

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array.Sort<string>(alpha, delegate(string rh, string lh) { return rh.Substring(0,2).CompareTo(lh.Substring(0,2)); });

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Bonjour Bacelar, merci également de ton aide

    Je ne connais pas ce "type" de syntaxe ( avec <string>)

    C'est quoi au juste cette ligne, une fonction de trie ?

    A quoi sert Alpha ?

    Merci beaucoup et désolé de mes questions de boulets !!!

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 503
    Par défaut
    A quoi sert Alpha ?
    C'est l'alpha du code de Redouane
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    string[] alpha = new string[] { "aeaaaaa", "aaaaaaa", "azaaaaa", "abaaaaa" };
    Array.Sort<string>(alpha, delegate(string rh, string lh)
        {
            return rh.Substring(0, 2).CompareTo(lh.Substring(0, 2));
        }
    );
    Je ne connais pas ce "type" de syntaxe ( avec <string>)
    C'est des génériques, cela correspond presque aux templates du C++.
    Donc "Sort<string>" c'est une méthode de tri sur des strings. Je trouve les génériques plus puissant que les templates mais je n’ai pas vérifié avec les templates de C++0x.

    le delegate(string rh, string lh), c'est un peu comme la définition d'un pointeur de fonction qui prend 2 strings en paramètre et qui retourne un entier. C'est la signature demandée par "Array.Sort<string>" pour son deuxième paramètre.
    le code entre {} juste après le delegate, c'est comme le corps de la fonction déclaré par delegate().

    En résumé, j'utilise la méthode Array.Sort<string>, en lui donnant en deuxième paramètre, le code à effectuer pour faire la comparaison entre deux objets du tableau.
    Le code du delegate ne fait que comparer les sous-chaines de 2 caractères des chaines passées en paramètre. Ces paramètres sont les différents éléments du tableau à trier.

    Merci beaucoup et désolé de mes questions de boulets !!!
    Pas vraiment, mon code est un peu "je me la pète avec les trucs un peu twinky" mais cela montre que la remarque
    j'ai toujours l'impression qu'il faut passer de x types vers x classes avant d'arriver à ce que l'on veux en c#
    n'est pas forcement exacte.

    Avec un peu d'habitude, ce type d'écriture avec delegate, fonction anonyme, etc. vous paraîtra très clair.

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