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 :

C# tri d'un dictionnaire


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Par défaut C# tri d'un dictionnaire
    Bonjour à tous,

    J'ai un petit pépin !

    J'ai actuellement un dictionnaire<int,ArrayList> et je voudrais trier les élements dans mon dictionnaire selon la première valeur de mon arrayList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                Dictionary<int, ArrayList2> dico = new Dictionary<int, ArrayList2>();
                dico.Add(2, new ArrayList { "1000", "ahah" });
                dico.Add(3, new ArrayList { "20000", "ahah" });
                dico.Add(1, new ArrayList { "2020", "ahah" });
    Le tri devrait se retrouver selon l'ordre 2,1,3.

    J'ai essayé avec la methode OrderBy

    dico = dico.OrderBy(kvp => kvp.Value).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

    Ça me dit qu'au moins un objet doit implémenter iComparable

    Je ne suis pas certain de comprendre le problème.


    J'ai donc regarder sur le web, je suis créer une classe ArrayList2 qui implemente ArrayList et iComparable et j'y ait redéfini CompareTo

    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
     
     
        class ArrayList2 : ArrayList, IComparable
        {
            public  int CompareTo(Object o){
                if (o == null) return 1;
     
                ArrayList arr = o as ArrayList;
     
                if (arr != null)
                {
                    return arr[0].ToString().CompareTo(arr[1].ToString());
                }
     
                return 0;
            }
    La aussi ça semble foirer, car il compare avec les autres élements du même ArrayList et pas avec les autres ArrayList du dictionnaire.

    Pourtant, si je veux trier par la valeur....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dico = dico.OrderBy(kvp => kvp.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
    Fonctionne #1 !

    Auriez-vous une idée, une piste de solution ?

    Merci

  2. #2
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Je n'ai pas tout lu dans la demande vu qu'il existe une classe OrderedDictionary qui me paraît être en adéquation avec le titre du message :

    http://msdn.microsoft.com/en-us/libr...ictionary.aspx

    Si cela ne convient pas, dis le.

  3. #3
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Ordered dictionnary c'est une collection qui peut être accédée par clé ou par index (un mix de lits et dictionnary, en gros).

    Celle qui est triée est SortedDictionnary : http://msdn.microsoft.com/en-us/library/f7fta44c.aspx

  4. #4
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Ordered dictionnary c'est une collection qui peut être accédée par clé ou par index (un mix de lits et dictionnary, en gros).

    Celle qui est triée est SortedDictionnary : http://msdn.microsoft.com/en-us/library/f7fta44c.aspx
    Mea culpa !

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 56
    Par défaut
    Les SortedDictionnary sont trié par la clef, c'est par un élement de la valeur que je veux faire le tri.

    @olibara : Faire une liste de mes liste, me ferais perdre le lien avec la clef..

    Il y a pleins de façon non-optimale de faire ce genre de tri, c'est une façon "optimal" que je cherchais.....

  6. #6
    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
    Citation Envoyé par JonathanMQ
    Faire une liste de mes liste, me ferais perdre le lien avec la clef..
    Pas du tout !
    Ta liste possede ser propres references distincte de celles de ton dictionaire
    Trier ta liste ne modifie pas les references de ton dictionnaire

    As tu déja essayé ?

  7. #7
    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
    Salut

    Trier un dictionnaire a rarement beaucoup de sens surtout si c'est en fait les valeurs que tu veux trier

    Moi je ferais ceci :
    1- Ne plus utiser des ArrayList : c'est obsolete et avantageusement remplacé par les List
    2- Tu aurais donc un dictionaine de <int,List>
    3- Tu peux aussi faire une List de test List<>
    4- Et ta List de List tu peux la trier si tu definis le comparer que tu souhaite

    Est ce que ca va dans le sens que tu souhaite ?

Discussions similaires

  1. Liste avec dictionnaire, tri des clés et sélection des variables
    Par CandyCH dans le forum Général Python
    Réponses: 8
    Dernier message: 07/12/2012, 21h56
  2. [XL-2003] Tri - double d'un dictionnaire
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/08/2012, 10h17
  3. Tri dictionnaire par clés
    Par mister2502 dans le forum Général Python
    Réponses: 7
    Dernier message: 07/04/2009, 21h37
  4. Tri liste dans un dictionnaire
    Par MC wacko dans le forum Général Python
    Réponses: 5
    Dernier message: 21/01/2008, 14h20
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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