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 :

[vb.net]Arraylist contre HashTable


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut [vb.net]Arraylist contre HashTable
    Bonjour,

    je dois mettre les objets suivants dans une collection...

    mon objet comprend:

    un N° de ligne unique
    un autre numéro de ligne

    exemple=

    001 004
    003 006
    004 006
    006 999

    Si je le met dans un arrayList, une fois sur un élément de monArrayList, je sais atteindre n'importe quel élément de monArrayList. ex: monArrayList.Item(monindex) . Comme je connais monindex, je peux facilement aller au précédent ou au suivant. Mais je ne peux pas aller à la ligne 006 999 car je ne sais pas que c'est la quatrième.

    J'ai donc cru être très malin en mettant mes valeurs dans MonHashTable qui est donc un HashTable.

    MonHashTable.add(MyObj.NoLigne, MyObj)

    Je sais ainsi retrouver ma ligne qui contient 004 dans la clé
    en faisant MonHashTable.Item("004")

    Mais comment trouver la ligne qui suit ma 004 puisque je ne connais pas sa clé (006 en l'occurence)?

    Quelqu'un peut-il m'aider

    Merci

  2. #2
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Tu utilise mal ta hashtable, ici tu en as pas besoin. Je t'ai répondu sur ton autre post comment faire pour trouvé ton index, si tu est incapable de traduire le code que je t'ai donner ... alosr trouve ton index avec for
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int index;
    for(int i=0; i<= tonArraylist.count -1; i++)
    {
    if (tonArraylist[i].Ligne == "004")
    index = i; 
    break;
    }

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Ok, je vais faire comme ça, ou par ta fonction que tu m'avais envoyée.

    Mais ça me dérange de chaque fois reboucler dans les +/- 1000 éléments de mon arrayList. J'espérais pouvoir trouver le numéro d'ordre dans ma HashTable et pouvoir "naviguer" dedans soit en indiquant ma clé, soit en donnant un numéro de séquence...


    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    rebonsoir,

    que penses-tu de mon idée ?

    de créer un HashTable avec mon objet

    monHash.add("001", monObjet)

    et en parallèle de créer un arraylist juste avec la clé de mon HashTable

    monArray.add("001")

    ainsi je pourrai à la fois retrouver un objet avec un index mais aussi retrouver mon index suivant !

    Mon arraylist sera de la même longueur que mon hashmap

  5. #5
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Tu créé 1 objet pour rien,donc ce qui implique faire la maintenance de 2 objet.

    Tu est capable de le faire avec un seul objet, fait allez tes méninges

  6. #6
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Euh ! et la SortedList !!?? ...

  7. #7
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Citation Envoyé par Kelpan
    Euh ! et la SortedList !!?? ...

    ? explique

  8. #8
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    SortedList est un hybride de HashTable et Arraylist.
    Elle représente une collection de paires valeur-clé triées par les clés et accessible par clé et par index.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim MaSortedList As New SortedList
     
    MaSortedList.Add("001", "004")
    MaSortedList.Add("003", "006")
    MaSortedList.Add("004", "006")
    MaSortedList.Add("006", "999")
    Tu peux l'utiliser comme une arraylist
    MaSortedList.GetByIndex(0) => Renvoi la valeur "004"
    MaSortedList.GetByIndex(1) => Renvoi la valeur "006"
    ...

    Ou comme une hashTable
    MaSortedList("001") => Renvoi la valeur "004"
    MaSortedList("003") => Renvoi la valeur "006"
    ...

    Attention de bien prendre note que la liste est triée par clé et non par ordre d'entrée !

    Sinon, il existe l'objet "System.Collections.Specialized.OrderedDictionary" qui fonctionne de la même manière qu'une "SortedList" et qui ne trie pas les clés et qui stocke par ordre d'entrée.


  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Ok, c'est la sortedlist qu'il me fallait !


    MySl.IndexOfKey(maclé) me donne MaPosition

    MySl.GetKey(MaPosition) me donne MaClé

    et
    CTtype(MySl.Item(MaClé),MaClasse).MaPropriété

    me retourne la valeur de mes rêves...

    UN TOUT GRAND MERCI A TOUS LES DEUX

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Nos réponses se sont croisées

    C'est vraiment hyper-puissant

    merci encore pour tes explications

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Citation Envoyé par Kelpan
    [COLOR=black
    Sinon, il existe l'objet "System.Collections.Specialized.OrderedDictionary" qui fonctionne de la même manière qu'une "SortedList" et qui ne trie pas les clés et qui stocke par ordre d'entrée.

    J'ai essayé cette collection mais elle n'a pas indexOfKey dont j'ai besoin.

    Je l'ai essayée car dans un cas, j'ai besoin d'une clé triée mais dans un autre pas.

  12. #12
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    Oui c'est un peu différent du SortedList au niveau utilisation.

    Ici c'est la propriété Item de l'objet qui est surchargé

    Item(Index As Integer)
    Item(Key as Object)

    Personnelement, je n'aime pas trop cet objet car, en voulant trop bien faire, les programmeurs y ont collé une tare.

    Que se passe-t-il si ta clé est de type Integer ?

    Tu peux utiliser cet objet, si tu es sur de ne pas utiliser d'integer comme clé.

  13. #13
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Citation Envoyé par Kelpan

    Ici c'est la propriété Item de l'objet qui est surchargé

    Item(Index As Integer)
    Item(Key as Object)

    Personnelement, je n'aime pas trop cet objet car, en voulant trop bien faire, les programmeurs y ont collé une tare.

    Que se passe-t-il si ta clé est de type Integer ?
    Tu cast ton integer en object (object)integer pour utiliser l'overload de la key

  14. #14
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    bien vu !

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

Discussions similaires

  1. Bonne utilisation des ArrayList et Hashtable?
    Par floctc dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 20/04/2010, 09h17
  2. Réponses: 1
    Dernier message: 26/08/2009, 08h52
  3. Réponses: 23
    Dernier message: 20/02/2007, 10h34
  4. [VB.Net][2.0] - HashTable Item ?
    Par troxsa dans le forum VB.NET
    Réponses: 2
    Dernier message: 30/05/2006, 10h32
  5. [1.1][Delphi.NET] Comment mélanger Hashtable/ArrayList ?
    Par sur_uix dans le forum Framework .NET
    Réponses: 17
    Dernier message: 17/02/2006, 14h02

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