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

Framework .NET Discussion :

[1.1] Comment scruter un Dictionary ?


Sujet :

Framework .NET

  1. #1
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 379
    Points
    5 379
    Par défaut [1.1] Comment scruter un Dictionary ?
    Bonjour;

    J'ai créé une collection d'objets dérivée de DictionaryBase.

    J'ajoute des objets à l'intérieur et je les affiche. Par ex : Obj1 .... Obj5
    Je veux faire réapparaitre les nom des objets dans un menu contextuel.
    Je fais donc un foreach sur myDict.Values. Et le menu m'affiche l'inverse de ce que j'ai rentré : Obj5 .... Obj1.

    Visuellement, c'est très désagréable.

    Comment faire pour avoir une scrutation qui est l'ordre chronologique des "Add" ?

    Merci

  2. #2
    Candidat au Club
    Inscrit en
    Décembre 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Dictionary
    Bonjour ,
    tu as fait avec quel langage?

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 379
    Points
    5 379
    Par défaut
    Je l'ai fait en C#, mais je pense qu'avec VB.NET le pb est identique.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    Le problème avec foreach, c'est que tu n'a aucun controle sur la facon dont les éléments de la collection sont traités, ils peuvent arriver dans un ordre totalement anarchique, surtout sur une entrée Dictionnaire, qui est basé sur le modele de données des Tables de hashages.
    Le seul moyen d'avoir un controle presque normal est d'utiliser une boucle FOR et non foreach, sur la collection Keys sur laquelle tu applique un trie et ensuite seuleemnt des clés tu récupere les données, ou si tu veux juste les données triées, tu fait un Sort sur la collection récupéré .Values hein
    Mais n'oublie pas le foreach ne garantie pas que tu les auras dans le bon sens, meme après trie.

  5. #5
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 379
    Points
    5 379
    Par défaut
    Je te remercie pour tes conseils.
    J'ai essayé IEnumerator :
    IEnumerator enumNet = myDictio.Keys.GetEnumerator();
    enumNet .MoveNext() => me ressort le même ordre que foreach

    Je vais voir avec FOR.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    Il est normal que IEnumerator te ressorte le meme ordre que la commande foreach pour la simple est bonne raison que la commande foreach est une commande "évoluée", en réalité, c'est une commande que tu pourrais aussi bien réécrire toi meme, elle se contente d'utiliser l'interface IEnumerator de la collection et de passer en revue tous les objets fourni par l'énumérateur obtenu.

    J'aurais due te prévenir que le problème ne venait pas directement de foreach, mais du système sous-jacent utilisé (les énumérateurs). Mais bon j'ai oublié... Mea culpa.

    Voila pourquoi à marche pas mieux.

  7. #7
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrayList maliste = new ArrayList(myHashtable.Values);
    maliste.Sort(new Comparer(CultureInfo.CurrentCulture));

  8. #8
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 379
    Points
    5 379
    Par défaut
    Merci pour ces précisions,
    Je vais essayer quelques trucs et après si je n'arrive à rien, je ferai un tri par ordre alphabétique.

    Je viens de regarder d'un peu plus près. Les éléments de la HashTable de la Dictionary sont dans le bon ordre, mais la scrutation est inversée.
    En gros, faut refaire la comparateur.

  9. #9
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Non, l'énumérateur.
    Le comparateur n'est utilisé que dans 'Sort', et le comparateur de base 'Comparer' le fait déjà par ordre alphabétique pour les string.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/09/2010, 17h43
  2. Réponses: 1
    Dernier message: 15/03/2010, 11h36
  3. Réponses: 2
    Dernier message: 21/10/2009, 10h38
  4. Réponses: 2
    Dernier message: 30/01/2009, 11h59
  5. Réponses: 2
    Dernier message: 24/01/2009, 18h18

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