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 :

Hashtable.ContainsKey : demande de précisions


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Par défaut Hashtable.ContainsKey : demande de précisions
    Bonjour à tous,

    En allant sur l'article MSDN de cette méthode, on y trouve :

    This method behaves exactly as Contains.

    This method is an O(1) operation.

    Starting with the .NET Framework 2.0, this method uses the collection’s objects’ Equals and CompareTo methods on item to determine whether item exists. In the earlier versions of the .NET Framework, this determination was made by using the Equals and CompareTo methods of the item parameter on the objects in the collection.
    J'utilise le Framework 1.1. Je remplis ma Hashtable d'objets Sleeve (une classe à moi) qui implémente IComparable et surcharge la méthode Equals. Pourtant, lors des différents appels à Hashtable.ContainsKey, à aucun moment je ne passe dans les méthodes CompareTo ou Equals de ma classe Sleeve.

    Ayant du mal à bien saisir ce qui est expliqué ci-dessus, j'aurais aimé savoir :
    * si ce comportement était normal ou non,
    * si un moyen existe pour que je fixe mes propres règles pour le calcul de la valeur de retour des appels à Hashtable.ContainsKey lorsque la table est remplie d'objets Sleeve.

    N'hésitez pas à me demander des précisions si je n'ai pas été assez clair. Merci d'avance

  2. #2
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut
    Une HashTable c'est un peu comme un Dictionary, ce sont des paires clef/valeur.
    La méthode .Contains vérifie si la table contient une valeur donnée, et donc là, ca va passer par tes méthodes de comparaisons.
    La méthode .ContainKeys vérifie si la table contient une clef donnée, et là ca va passer par les méthodes de comparaisons des objets de clefs.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    class MyClassKey : IComparable
    {
    private string _name;
    public MyClassKey(String n) { this._name = n; }
    ....
    }
     
    class MyClassValue : IComparable
    {
    private int _RandomNumber;
    public MyClassValue(int n) { this._RandomNumber = n; }
    ....
    }
     
    HashTable ht = new HashTable();
     
    MyClassKey k1 = new MyClassKey("Nombre de jour dans une semaine");
    MyClassValue v1 = new MyClassValue(7);
     
    MyClassKey k2 = new MyClassKey("Nombre de nains dans Blanche Neige");
    MyClassValue v2 = new MyClassValue(7);
     
    ht.Add(k1, v1);
    ht.Add(k2, v2);
     
    ht.Contains(vN); // Utilise la comparaison définie par MyClassValue, indique si la table contient cette valeur quelque soit la clef. Si la table contient la valeur, ca ne veux pas dire que la valeur n'est contenue qu'une seule fois. La preuve, on a ajouter 2 fois la valeur 7.
     
    ht.ContainKey(kN); // Utilise la comparaison définie par MyClassKey, on vérifie l'existance de la clef. Il ne peux y avoir deux clef identique.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Par défaut
    Euh ... Merci mais je connais très bien le fonctionnement de la classe. D'ailleurs, la fonction Contains traite sur les clefs (c'est l'équivalent de ContainsKey) et non les valeurs. Tu as confondu avec ContainsValue.

    Simplement, j'aimerais savoir pourquoi un appel à ContainsKey(item) ne passe pas par la méthode CompareTo ou Equals de l'objet item en question.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 160
    Par défaut
    Bon.

    Il s'agissait en fait de surcharger GetHashCode dans ma classe Sleeve, chose que je ne comprends absolument pas. Le problème est donc résolu mais inexpliqué

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

Discussions similaires

  1. demande de précisions
    Par loucasse dans le forum Access
    Réponses: 3
    Dernier message: 24/10/2006, 09h56
  2. Demande de précision le middleware
    Par david42 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 23/05/2006, 11h11
  3. Demande de précision sur "Extends" ..
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 12/02/2006, 14h25
  4. demande de précision et d info
    Par cm16 dans le forum Windows
    Réponses: 7
    Dernier message: 11/01/2006, 11h08
  5. Demande de précisions sur Backup/Restore et transactions
    Par lio33 dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 16/11/2005, 12h08

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