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#]Comment faire un dictionnaire avec une clé string et une clé dans la valeur


Sujet :

C#

  1. #1
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut [C#]Comment faire un dictionnaire avec une clé string et une clé dans la valeur
    Bonjour,

    j'aimerais faire un mix entre KeyCollections pour lequel on peut extraire la clé incorporé dans les valeurs et un dictionnaire générique avec une clé string.
    Parce que l'interêt serait de faire une recherche par la clé string ou par la clé incorporé.

    Savez-vous comment je peux m'y prendre ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Et pourquoi pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dictionary<string, string> MyDic = new Dictionary<string, string>();

    ?

  3. #3
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut
    Bonsoir,

    en fait j'avais initialement fait un dictionnaire comme ceci:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dictionnary<string,MyClass> MyDico = new Dictionnary<string,MyClass>();

    car j'avais besoin d'une clé string. Mais dans ma classe, il y a une valeur de type int que j'aimerais utiliser comme clé, un peu comme le permet la classe KeyedCollection.

    Merci d'avance pour votre aide.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Alors pourquoi pas:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dictionnary<int,MyClass> MyDico = new Dictionnary<int,MyClass>();

    ?

  5. #5
    Membre actif
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Points : 252
    Points
    252
    Par défaut
    En fait, j'aimerais utiliser deux clés, une clé string et une clé int.

    Merci.

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu ne peux pas, cela fonctionne par paire de clé/valeur

    Il te faut, dans ton cas, créer ton propre dictionnaire.

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Tu peux utiliser une OrderedDictionary. En utilisant la méthode Insert tu peux choisir l'index d'insertion, et part suite ta clé int est l'index, ta clé string est la clé de collection.
    Mehdi Feki : Modérateur .Net

  8. #8
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut Précisions
    Le problème de la classe OrderedDictionary, c'est qu'elle n'est pas générique. Donc si on veut utiliser une liste d'objets métiers, il faudra constamment effectuer des Cast explicites.

    Du coup, on peut faire comme Thomas propose, c'est à dire créer sa propre classe. C'est ce que j'ai fait, mais il me reste une interrogation.
    Est-ce qu'il existe plus rapide que l'implémentation que j'ai fait dans la propriété this[int index] ? J'ai peur que la méthode CopyTo ait un coût non négligeable.

    public class Composite
    {
    private Dictionary<string, CompositeField> dico;

    public Composite()
    {
    dico = new Dictionary<string, CompositeField>();
    }

    public void Add(string name, CompositeField data)
    {
    dico.Add(name, data);
    }

    public CompositeField this[string name]
    {
    get { return dico[name]; }
    }

    public CompositeField this[int index]
    {
    get
    {
    CompositeField[] myValues = new CompositeField[dico.Count];
    dico.Values.CopyTo(myValues, 0);
    return myValues[index];
    }
    }
    }

    PS : J'ai implémenté cette classe dans le cadre du pattern "Composite".
    PS (bis!) : j'ai volontairement épuré ma classe pour conserver uniquement l'idée générale. D'ailleurs elle ne s'appelle pas Composite :-)
    Il y a toujours au moins deux solutions à un problème.

    http://software-design-development.blogspot.com/

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

Discussions similaires

  1. [MySQL] comment faire un lien avec un bouton pour ouvrir une page en php
    Par Debutant10 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/04/2012, 21h11
  2. comment faire l'appel avec main d'une classe
    Par Platon93 dans le forum Général Java
    Réponses: 2
    Dernier message: 24/04/2008, 16h15
  3. Réponses: 3
    Dernier message: 03/10/2007, 00h59
  4. comment faire un sphère avec une texture ?
    Par fregate dans le forum OpenGL
    Réponses: 1
    Dernier message: 12/09/2005, 03h37
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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