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

Windows Forms Discussion :

[C#] Inverser l'ordre des éléments d'une Hashtable


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 113
    Points : 38
    Points
    38
    Par défaut [C#] Inverser l'ordre des éléments d'une Hashtable
    Bonjour,


    Je voudrais avoir les éléments d'une hashtable rangés dans l'ordre dans lequel ils ont été ajouter.
    Car je viens de me rendre compte que le premier élément se trouvait tout à la fin de la Hashtable.
    Est-il possible d'inverser l'ordre ou ajouter en queue et non en tête de Hashtable ?
    Merci

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Salut,

    Je ne vois pas de reponse à moins de creer ta propre structure combinant une hashtable pour l'accees clé/valeur et une autre collection pour sauvegarder l'ordre

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Une hashtable est rangée dans l'ordre des clés de hachage et non pas chronologiquement ; dans ton cas il semble préférable de choisir une autre structure ordonneé (stack, queue,...)

    Sinon un simple arraylist qui (de mémoire) possède une mémoire Sort()

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par colonel
    dans ton cas il semble préférable de choisir une autre structure ordonneé (stack, queue,...)

    Sinon un simple arraylist qui (de mémoire) possède une mémoire Sort()
    Oui mais s'il a besoin d'un accees clé/valeur il faut bien utiliser une hashtable dans ce cas.

    L'autre solution la plus evidente est d'iterer sur la hashtable et d'inserer en meme temps dans une arraylist, mais bon ce n'est pas trop beau et coté performances

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 113
    Points : 38
    Points
    38
    Par défaut
    Vu que j'utilise une base de données je pense avoir contourné la chose en modifiant ma requete.
    Cepensdant est-il possible d'ajouter un élément dans une table de hashage à un index précis ?
    Car j'ai un probleme d'ordre à l'ajout.
    exemple:
    ajout de l'elem 1 -> emplacement 6 dans la hashtable
    ajout de l'elem 2 -> emplacement 1 dans la hashtable
    ajout de l'elem 3 -> emplacement 7 dans la hashtable

    N'est pas possible d'avoir dans la hashtable les éléments de manière indexé ?
    Donc comme ça :
    ajout de l'elem 1 -> emplacement 1 dans la hashtable
    ajout de l'elem 2 -> emplacement 6 dans la hashtable
    ajout de l'elem 3 -> emplacement 7 dans la hashtable

    C'est problématique dans mon cas

    En ce qui concerne mon probleme, je suis obligé d'utiliser une table de hashage comme structure.
    Merci

  6. #6
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    J'étais entrain de lire un article et je me suis souvenu de ce post, qui datte deja d'un mois !

    Le framework 2.0 offre de nouvelles structures issues du namespace System.Collections.Specialized qui permettent de personnaliser la Hashtable et d'y ajouter de nouvelles focntionnalités.

    Enfin, la collection OrderedDictionary, classe permet de resoudre le probleme de ce Post

  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
    Citation Envoyé par lancer83
    Vu que j'utilise une base de données je pense avoir contourné la chose en modifiant ma requete.
    Cepensdant est-il possible d'ajouter un élément dans une table de hashage à un index précis ?
    Tsssssssssssssssssssss..........................
    Bon... conceptuellement, ce que tu dis est un abérration.

    Une Hashtable n'est pas une collection ordonnée. Le dernier ou le premier élément dedans, ça dépend de la clef que tu utilises, et il n'y a aucune garantie sur l'ordre d'insertion ou de récupération. (ce qui signifie qu'il peut change entre deux versions du framexwork)

    Par analogie, c'est comme si tu avais un gros sac en toile contenant des haricots, et que tu demandais "c'est possible que mon sac, quand je sors un haricot, il me sorte le premier que j'ai rentré dedans ?"
    Ou bien "c'est possible d'insérer un haricot dans mon sac, pile entre les deux haricots que j'ai choisi ?"

    Bref, il te faut une autre structure de données que la Hashtable de base, tu n'as pas le choix. +1 pour les réponses de mehdi et colonel (mais attention, la ArrayList est très lente si elle contient beaucoup d'éléments).

  8. #8
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Salut Mose

    Citation Envoyé par Mose
    mais attention, la ArrayList est très lente si elle contient beaucoup d'éléments.
    Je suis interressé par cette remarque. sur quel critere tu t'es basé ? un petit lien ?
    je crois que la ArrayList causeun probleme de performance que lorsqu'elle change de taille par rapport à la taille initiale allouée

    A part ca, comme j'ai dit OrderedDictionary resoud les problemes de tri et d'accees de la Hashtable

  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
    Citation Envoyé par mehdi_tn
    Je suis interressé par cette remarque. sur quel critere tu t'es basé ? un petit lien ?
    Salut Medhi,
    Nan juste, un pti programme de test qui fait des ajouts/recherche/suppressions.
    Citation Envoyé par mehdi_tn
    je crois que la ArrayList cause un probleme de performance que lorsqu'elle change de taille par rapport à la taille initiale allouée
    Curieusement non, l'ajout est aussi rapide qu'avec la Hashtable, mais c'est la recherche qui explose tous les compteurs !
    Citation Envoyé par mehdi_tn
    A part ca, comme j'ai dit OrderedDictionary resoud les problemes de tri et d'accees de la Hashtable
    Ouaip, j'ai vu ça (mais j'ai répondu trop vite )

  10. #10
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par Mose
    Curieusement non, l'ajout est aussi rapide qu'avec la Hashtable, mais c'est la recherche qui explose tous les compteurs !
    Bizarre, curieux de savoir comment ils ont implementé ca !!!, bon la recherche et la suppression, c'est clair que ca explose les compteurs, mais ce ne sont pas des criteres à prendre à consideration dans son cas de figure, d'ailleurs s'il travaille en 1.1 , il n'aura pas d'autres alternatives que d'utiliser une ArrayList

    A+

  11. #11
    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
    Citation Envoyé par mehdi_tn
    Bizarre, curieux de savoir comment ils ont implementé ca !!!
    Un coup de Reflector et tu sauras...
    Citation Envoyé par mehdi_tn
    bon la recherche et la suppression, c'est clair que ca explose les compteurs
    Ah non, pas la suppression. Enfin après ça dépend si tu utilises la suppression indexée ou la suppression par objet (qui doit faire une recherche)
    Citation Envoyé par mehdi_tn
    d'ailleurs s'il travaille en 1.1 , il n'aura pas d'autres alternatives que d'utiliser une ArrayList
    Je me permet d'ajouter : "pas d'autres alternatives simples que d'utiliser une ArrayList".
    On peut toujours créer sa propre structure de donnée et la coller en unsafe pour optimiser un peu les perfs...

Discussions similaires

  1. [FAQ] [jQuery] Comment puis-je changer l'ordre des éléments d'une liste ?
    Par SylvainPV dans le forum Contributions JavaScript / AJAX
    Réponses: 3
    Dernier message: 18/03/2014, 23h44
  2. Ordre des éléments d'une map<int, string>
    Par jamsgoodon dans le forum Débuter
    Réponses: 9
    Dernier message: 18/02/2011, 15h27
  3. Inverser l'ordre des éléments d'un tableau
    Par nitch01 dans le forum Débuter
    Réponses: 5
    Dernier message: 28/10/2009, 08h18
  4. Changer l'ordre des éléments d'une JList avec la souris
    Par rafalsh dans le forum Composants
    Réponses: 0
    Dernier message: 02/07/2009, 20h13
  5. [Collections] ordre des clés d'une Hashtable
    Par matzeus dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 04/10/2006, 09h17

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