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 :

Structure Key=int Value=arrayList


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut Structure Key=int Value=arrayList
    Bonjour tout le monde,

    Je vous expose d'abord mon problème.
    Je lis des BDD oracle que je voudrais récupérer dans une structure <Key,Value> (avec de préférence une indexation sur la clé).

    Pour un même NUMDOSSIE donnée on peut avoir plusieurs enregistrements.

    Donc je veux avoir un genre de Structur<int,ArrayList>.
    Pour le moment c'est un abstrait.


    Pour ce faire, j'ai choisi d'utiliser un HashTable.
    Voici le code que j'ai déjà :

    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
     
    Hashtable res = new Hashtable();
     
    OracleDataReader dr = _myconnection.Execute( "SELECT * FROM ....");
     
    while (dr.Read())
    {
                    // si la clé n'existe pas on fait un add sur notre Hashtable type <int, Arraylist>
                    if(!res.ContainsKey(Int32.Parse(dr["NUMDOSSIE"].ToString())))
                    {
                        res.Add(Int32.Parse(dr["NUMDOSSIE"].ToString()), new ArrayList().Add(new Objet_Enregistement(dr)));
                    }
                    else
                    { 
                        // Comment récupérer l'arrayList pour faire un ADD dessus ? 
     
                    }
    }

    Donc j'ai deux questions :
    Es-ce qu'un HashTable est le meilleur choix possible ?
    Si oui, comment faire une espère de "get value from Key=NUMDOSSIE"
    pour faire un add sur mon arraylist si la clé existe déjà ?

    Merci d'avance pour votre aide.

  2. #2
    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
    Un dictionnaire de List<T>

    Remplace de préférence Arraylist par List<T>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dictionary<int,List<T>> Dico=new Dictionary<int,List<T>>();

  3. #3
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Es-ce que le Dictionary est plus performant qu'un HashTable ?

    Sinon je viens tout juste de trouver.
    J'avais tellement la tête dans le guidon que j'avais oublié de caster.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ArrayList ar = (ArrayList)(res[Int32.Parse(dr["NUMDOSSIE"].ToString())]);
                        ar.Add(new Objet_Enregistement(dr));

    PS : merci pour ta réponse.

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Perso, j'aurais utilisé un Dictionnary, puisqu'il gère déjà l'unicité de la clé.

    Ensuite, je verrais un truc du genre :
    Code c# : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace TestDico
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Record> rs = new List<Record>();
                rs.Add(new Record(1, 1));
                rs.Add(new Record(1, 2));
                rs.Add(new Record(1, 3));
                rs.Add(new Record(2, 4));
                rs.Add(new Record(2, 5));
     
                Dictionary<int, List<int>> dico = new Dictionary<int, List<int>>();
                foreach (Record r in rs)
                {
                    if (dico.ContainsKey(r.NUMDOSSIE))
                    {
                        dico[r.NUMDOSSIE].Add(r.NUMTRUC);
                    }
                    else
                    {
                        List<int> l = new List<int>();
                        l.Add(r.NUMTRUC);
                        dico.Add(r.NUMDOSSIE, l);
                    }
                }
     
                foreach (KeyValuePair<int, List<int>> kvp in dico)
                {
                    Console.WriteLine("Numéro de dossier {0}", kvp.Key);
                    foreach (int i in kvp.Value)
                    {
                        Console.WriteLine("\tNuméro de truc {0}", i);
                    }
                }
                Console.ReadKey(true);
            }
     
            struct Record
            {
                public int NUMDOSSIE;
                public int NUMTRUC;
     
                public Record(int numdossie, int numtruc)
                {
                    NUMDOSSIE = numdossie;
                    NUMTRUC = numtruc;
                }
            }
        }
    }

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Numéro de dossier 1
            Numéro de truc 1
            Numéro de truc 2
            Numéro de truc 3
    Numéro de dossier 2
            Numéro de truc 4
            Numéro de truc 5
    -- Edit : Grilled

  5. #5
    Membre éclairé Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Par défaut
    Avant tout merci pour la clarté de tes réponses.

    J'ai fait quelques recherche sur les HashTable et les Dictionnary et ils disent que HashTable à était rendu presque obsolète par le Dictionnary.

    Puis je suis tombé sur ça.
    http://blog.bodurov.com/Performance-...ary-Hashtable/

    Et je ne sait pas ce que tu en penses, mais j'ai l'impression que pour ce que j'ai à faire, HashTable est plus performant.

    à savoir que mon select me renvoi plus de 4.600.000 enregistrements.
    Comme Hashtable réalise une allocation mémoire plus faible je pense que je vais l'utiliser pour éviter les paginations possible.


    En tout cas je vais tester le deux.

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

Discussions similaires

  1. [WPF]DataGrid Binding Dictionary Key and Value
    Par zenico64 dans le forum C#
    Réponses: 0
    Dernier message: 26/03/2015, 10h41
  2. [Débutant] Structure de donnée Key-Value avec Key non unique
    Par Howling dans le forum C#
    Réponses: 4
    Dernier message: 13/05/2013, 20h06
  3. Associer automatiquement $key et $value d'un array
    Par dldstyle dans le forum Langage
    Réponses: 6
    Dernier message: 22/07/2010, 13h28
  4. [Hashtable]Recuperer les keys grace à Value
    Par kululu dans le forum Général Java
    Réponses: 5
    Dernier message: 15/04/2010, 10h46
  5. ''incorrect values in slqda structures"
    Par dienedz dans le forum Débuter
    Réponses: 2
    Dernier message: 28/09/2004, 11h25

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