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 :

Tuto Dictionary ou Hashset


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Tuto Dictionary ou Hashset
    Bonjour

    Existe-t-il un tuto pour l'usage des Dictionary ou des Hashset
    L'aide MSDN est a nouveau imbitable sur le sujet !

    Et donc meme si je comprends le principe je me sens incapable de pratiquer
    Imaginons un cas simple

    J'ai une classe a trois elements
    J'ai une liste de cette classe

    string mastring;
    int monint;
    double mondouble;

    Je voudrais faire par exemple 3 dictionaires cad 1 sur chacun des elements
    Comment faire ?

    Est la meme chose que si je fais 3 hashset
    Quelle est la difference fonctionelle entre un hashset et un dico ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je ne comprends pas trop ce que tu veux faire... qu'est-ce que ça va t'apporter de créer un Dictionary pour chacune de tes variables ? tu vas en faire quoi ?

    Un Dictionary est une collection d'objets associés chacun à une clé, ce qui permet de les retrouver par cette clé.
    Un Hashset est une collection d'objets uniques (pas de doublons)

    il y a des tutos ici :
    http://mehdi-fekih.developpez.com/ar...dictionnaires/
    http://badger.developpez.com/tutoriels/dotnet/hashset/

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je ne comprends pas trop ce que tu veux faire... qu'est-ce que ça va t'apporter de créer un Dictionary pour chacune de tes variables ? tu vas en faire quoi ?
    C'était evidement un exemple

    Je ne connais pas du tout l'usage des Hashset ni des Dictionnaire donc je cherche par exemples

    L'idée dans cet exemple est de pouvoir indexer une liste sur trois clef differentes

    En C pour faire ca, j'aurais alloué trois tableaux de pointeurs sur mon tableau de structure j'aurais trié ces trois tableaux selon les clef souhaitées et voila

    Mais peut etre que je me trompe et que les dicttionary et les hashset ca ne sert pas du tout a ca.

    Je vais parcourir les liens que tu m'a donné

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    ah ok, c'est pour accéder à tes objets selon différents critères ? un peu comme des index dans une BDD quoi...

    Dans ce cas un Dictionary peut effectivement faire l'affaire
    pas un Hashset par contre (pas d'association clé/valeur)

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Tomlev

    C'est bien ca
    Mais je dois encore bien assimiler comment déclarer et utiliser un dictionnaire dans mon cas. J'ai pas encore digéré ca, pas asser d'exemples signifiants et certainement pas dans la doc MSDN

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Rassure-toi, ce n'est pas du tout compliqué à utiliser... par exemple, si on reprend ta classe dont tu parlais (appelons là A) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class A
    {
    string mastring;
    int monint;
    double mondouble;
    }
    Si tu veux faire un dictionnaire pour accéder à des objets A par la valeur de leur champ mastring, il faut que tu déclares un Dictionary<string, A> (le premier paramètre générique est le type de la clé, le second le type de la valeur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dictionary<string, A> dico = new Dictionary<string, A>();
    Pour ajouter des éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A a1 = new A();
    A a2 = new A();
    ...
    dico.Add(a1.mastring, a1);
    dico.Add(a2.mastring, a2);
    Et pour accéder à un objet A stocké dans le dictionnaire avec la clé "hello":

    Petite remarque (c'est peut-être évident mais il faut quand même le signaler...) : dans le dictionnaire, chaque clé doit être unique. Autrement dit, une clé donnée ne peut correspondre qu'à une valeur dans le dictionnaire.
    Donc si tes champs mastring, monint et mondouble n'ont pas des valeurs uniques, tu ne peux pas les utiliser comme clé d'un dictionnaire.

    Si le but est simplement d'avoir des listes triées suivant ces valeurs (avec éventuellement des valeurs en double), oriente-toi plutôt vers la classe SortedList

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Tomlev

    Ton explication est limpide j'ai ENFIN compris comment marchait un dictionnaire !

    Et je vais aussi voir ce que permet les SortedList que je ne connaissait pas encore

  8. #8
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Je voudrais quand même préciser quelque chose.

    En C, puisque tu n'utilises pas de conteneur associatif, avoir des tableaux triés est assez important, puisque ça permet de faire une recherche dichotomique (en o(log n)). Donc même si pour ton appli elle-même tu n'as pas besoin de données triées, algorithmiquement tu peux y avoir intérêt.

    En C# (pareil en C++ et java d'ailleurs), on a à disposition un grand nombre de conteneurs optimisés pour telle ou telle optimisation. Et offrir un itérateur trié a un coût.

    Pour compléter ce que dit tomlev, un bon exemple de dictionnaire est un répertoire windows, par exemple. Un répertoire associe un fichier à un nom de fichier ; tu ne peux pas avoir deux fichiers qui ont le même nom.

  9. #9
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Guulh

    En C, l'equivallent d'un container associatif ou meme de l'acces à une List<T>
    C'est un tableau de pointeur de pointer sur structure

    Ca prends peu de place c'est d'une efficacité redoutable
    Mais bon, je ne vais pas ouvrir un debat sur l'usage de C
    Une bonne connaissance pratique de C Parfois bloque la compréhension de certains concept C# mais souvent ca aide a trouver la solution la plus optimale.

  10. #10
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Je peux t'assurer que les implémentations efficaces de conteneurs associatifs ne sont pas à base de tableaux, mais plutôt d'arbres binaires ou de tables de hachage. Ce qui est fortement appréciable quand on a beaucoup d'éléments, car la complexité de l'ajout et de l'accès sont quasi-constantes, et non pas linéaire ou polynomial. C'est bien sûr tout à fait faisable en C, mais plus complexe et verbeux.

  11. #11
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Yep !

Discussions similaires

  1. ERP: ADempiere/Compiere. Tuto sur: Application Dictionary?
    Par Dexter_Morgan dans le forum Autres ERP
    Réponses: 8
    Dernier message: 14/06/2010, 07h08
  2. Un tuto pour direct show
    Par Olivier Delmotte dans le forum DirectX
    Réponses: 11
    Dernier message: 04/04/2003, 21h28
  3. tuto sur MDI
    Par nicholz dans le forum Composants VCL
    Réponses: 2
    Dernier message: 25/01/2003, 17h37

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