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 :

construction d'une liste de listes, etc.


Sujet :

C#

  1. #1
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut construction d'une liste de listes, etc.
    Salut, les gens.

    j'arrive pas à pondre un algo de construction de liste, si quelqu'un peut m'aider.

    bon, j'énonce les faits :

    on prend une liste "cmdlist", celle qu'on va construire.
    pour la méthode, on récupère une liste "param" contenant un nombre variable d'éléments.
    pour chaque élément de param, je vais chercher une instruction qui lui correspond (accompagnée de ses arguments, donc surement dans une liste ou un dictionnaire, via la méthode d'une classe externe).
    enfin, j'ajoute l'instruction à cmdlist UNIQUEMENT si elle n'y est pas déjà présente.
    au final, c'est pour concaténer une string "commande" qui reprend l'instruction et ses arguments (si il y a plusieurs instructions différentes, on aura plusieurs chaines).
    voilà.
    si, au passage, vous avez plus simple, n'hésitez pas. Merci de l'aide éventuelle.

  2. #2
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Bonjour,

    Tu veux ajouter toutes les commandes dans ta liste cmdlist de tous les paramètres de ta liste param mais sans doublon ?

    EDIT:
    Si j'ai bien compris :
    cmdlist
    |
    |-> param1
    | |
    | |--> commandF(param...)
    | |--> commandA(param...)
    |
    |
    |-> param2
    | |
    | |--> commandX(param...)
    |
    |
    |-> param3
    | |
    | |--> commandK(param...)
    | |--> commandP(param...)
    | |--> commandM(param...)
    ...
    C'est ça ??

    /EDIT:

    Et donc quel est le problème ?

  3. #3
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    plutôt :
    cmdlist
    |
    |-> commandX(param1)
    |
    |
    |-> commandY(param2)
    |
    |
    |-> commandZ(param3)

    et si un param4 ramène une commandY, pas besoin de l'ajouter à cmdlist.

    La méthode qui va construire la chaine string commandYtext, re-récupèrera param2, param4 et tout ce qui est encore nécessaire.

    Le problème est que j'arrive pas à pondre l'algo, le pseudo-code qui va bien ou trouver encore plus simple.

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    mmhh je vois mieux maintenant.

    Dans la logique,

    -> tu crées ta liste cmdlist,
    -> tu parcours tous param(là tu fais une boucle pour ça :for, while ou autre selon tes désirs et tes contraintes, moi j'opterais pour le for )
    -> sur chaque param, tu regardes ses commandes.
    -> tu parcours ta cmdlist à la recherche de la commande.
    -> Non elle n'existe pas : tu l'ajoutes à la fin de cmdlist avec le param qui va avec.
    -> Oui elle existe : tu ajoutes le nouveau param sur cette commande après le dernier.
    -> et ainsi de suite pour chaque commande

    Tu voyais ça comment toi ? Pour savoir si tu avais une ébauche de travail dedans ? on peut repartir de ce que tu pensais faire autrement.

    PS : tu peux poster ton code après (les parties concernées seulement) pour qu'on en discute si tu as un souci. En attendant, bonne chance

  5. #5
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    peut être ça :

    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
    List <Dictionary> cmdlist;
    Dictionary<string,string> cmd;
     
    public void Createcmdlist (List <string> param)
    {
       foreach (argument in param)
       {
          cmd=Driver.RechInstruction(argument);
          if(!Exist(cmd))
             cmdlist.Add(cmd);
       }
    }
     
    public bool Exist(Dictionary <string,string> cmd)
    {
       bool exist=false;
       foreach (elem in cmdlist)
       {
          if (elem.instruction=cmd.instruction)
             exist=true;
       }
    }

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    OK

    A partir de là tu peux ajouter les commandes dans ta cmdlist si je comprend bien. Seulement, admettons que la commande existe déjà tu n'ajoutes pas le paramètre dans cmdlist.cmd(tes_paramètres) ?

    Il te reste ça à faire et c'est OK non ?

  7. #7
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    voilà. si une instr existe déjà dans cmdlist, on n'ajoute pas cmd en cours de lecture (dans la boucle).

    mais jusque là, j'y arrivais pas.

    Par contre, tu peux me compléter les parenthèse de mes foreach ? ça m'est un peu compliqué, à mon niveau, l'utilisation des listes typées et des dictionnaires.

  8. #8
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Logiquement l'ajout du param se ferait dans un else tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void Createcmdlist (List <string> param)
    {
       foreach (argument in param)
       {
          cmd=Driver.RechInstruction(argument);
          if(!Exist(cmd))
             cmdlist.Add(cmd);
          else
             // ajout de ton paramètre dans cmdlist.cmd
       }
    }
    Mais le fait est que cmd n'est pas une liste. Je ne vois pas comment fonctionne ton Dictionary (je vais me renseigner là dessus, mais si tu peux m'en apprendre dessus c'est encore mieux !).

    Mais si tu avais une List à la place tu pourrais faire :
    encore que ça changerait le reste du code. Mieux vaut rester avec le dictionary je pense.

  9. #9
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    un Dictionary a deux arguments <Key, Value>, tous les deux typés. un mot, une définition, d'où son nom.

    Donc, on peut faire Dictionary<string,string> cmd
    avec ("Instruction","RESET")

  10. #10
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    OK merci,

    en complément avec ton explication : http://msdn.microsoft.com/fr-fr/library/xfhwa508.aspx

    Donc, prenons ton exemple,
    ("Instruction","RESET")
    Instruction est la Key et RESET est le paramètre si je comprend bien.

    Mais est-ce que la Key est aussi la commande du coup ? (key == commande == instruction ?)

    Si oui, pour faire l'ajout de commande il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public void Createcmdlist (List <string> param)
    {
       foreach (argument in param)
       {
          cmd=Driver.RechInstruction(argument);
          if(!Exist(cmd))
             cmdlist.Add(cmd);
          else
             cmdlist.cmd.Add(cmd.instruction, param);
       }
    }
    Mais je n'ai p-e pas tout cerné et donc pas répondu correctement

  11. #11
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    Non, c'est RESET, le paramètre. la clef est l'équivalent de l'index pour une liste simple.

  12. #12
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Non, c'est RESET, le paramètre.
    Ce n'est pas ce que j'avais dis ?
    RESET est le paramètre si je comprend bien
    Voila un exemple du lien que j'ai mis plus haut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Create a new dictionary of strings, with string keys.
            //
            Dictionary<string, string> openWith = 
                new Dictionary<string, string>();
     
            // Add some elements to the dictionary. There are no 
            // duplicate keys, but some of the values are duplicates.
            openWith.Add("txt", "notepad.exe");
            openWith.Add("bmp", "paint.exe");
            openWith.Add("dib", "paint.exe");
            openWith.Add("rtf", "wordpad.exe");
    les clés sont txt, bmp etc ... et les valeurs (définitions) notepad.exe etc ...

    Dans ton cas Param et cmd.instruction sont lesquels ?

  13. #13
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    bon, param n'est utilisé que dans une méthode d'une classe externe pour obtenir le dictionnaire cmd.
    Et donc, cmd.inctruction correspondrait à "txt", "bmp" etc.

    Donc : cmd["instruction"]

  14. #14
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    Réécriture du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    List <Dictionary> cmdlist;
    Dictionary<string,string> cmd;
     
    public void Createcmdlist (List <string> param)
    {
       foreach (argument in param)
       {
          cmd=Driver.RechInstruction(argument);
          if(!cmdlist.Contains(cmd))
            cmdlist.Add(cmd);
       }
    }

  15. #15
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Si ça se trouve je n'avais tout simplement pas compris ce que tu voulais faire de "Reset" par exemple.
    Tu veux concaténer les différents paramètres d'une seul commande sil il y a plusieurs fois la même commande, ceci à la place d'ajouter plusieurs fois la commande dans ton dictionnaire ?

    Donc Dictionary<string, string> prendrait les différents paramètres ?

    Par exemple,

    Au lieu d'avoir dans ton dictionnaire :
    ("instruction1", "Reset")
    ("instruction1", "Reboot")
    ("instruction1", "Sleep")

    tu aurais
    ("instruction1", "ResetRebootSleep")

    Ou alors je comprend rien (là désolé mais c'est pas forcement évident de comprendre avec un point de vue externe)

  16. #16
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    ça c'est un autre problème.
    dans cmdlist, en fait, je récupère une structure de commande.
    c'est à partir de cette structure que je récupère les valeurs de même nom que <string, STRING> pour concaténer string commande=Reset+Reboot+Sleep

  17. #17
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    List <Dictionary> cmdlist;
    Dictionary<string,string> cmd;
     
    public void Createcmdlist (List <string> param)
    {
       foreach (argument in param)
       {
          cmd=Driver.RechInstruction(argument);
          if(!cmdlist.Contains(cmd))
            cmdlist.Add(cmd);
          else
            cmdlist.cmd.argument += argument;
       }
    }
    Là ça concatène les différents arguments pour une même commande. Est-ce, ce que tu veux faire ??

  18. #18
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    non, le else est de trop. les valeurs qui vont se concaténer dans la commande finale ont une autre source que cmd.

  19. #19
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    402
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 402
    Par défaut
    Quelle est donc cette autre source ?

    Tu me demandes bien de concaténer les différents paramètres d'une même instruction, mais dans le foreach ?

  20. #20
    Membre très actif Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Par défaut
    bon, dans cette commande, chaque argument fait l'objet d'une textbox de l'IHM : $WP+TRACK+[Tag]=[Password],[Mode],[Time],[Distance],[Number of TrackingTimes],[Track basis],[CommSelect],[Heading]
    TRACK est l'instruction
    imagine que sur l'IHM, j'en modifie un et je veux le renvoyer, donc en réécrivant la commande
    on note, la présence de $WP, en premier, mais qui va changer ou ne pas exister, d'un appareil à l'autre
    voilà ce que fait mon appli
    mais cette structure de commande, elle ne la connais pas, puisque c'est différent d'un appareil à l'autre
    la structure est connu dans un driver
    dictionnaire = structure de commande et la liste = différentes commande pour différents arguments de l'IHM qui ne sont pas tous dans la même instruction
    les valeurs des arguments sont dans l'IHM, mais la valeur de "instruction" (ici "TRACK") est connu du driver, donc il la passe directe.

Discussions similaires

  1. [Débutant] Construction d'une liste ASP
    Par ProbeComprex dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/12/2011, 10h38
  2. Réponses: 1
    Dernier message: 04/06/2011, 07h10
  3. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  4. Réponses: 6
    Dernier message: 24/01/2005, 11h06
  5. [VB6] largeur d'une zone de liste d'une combobox
    Par Nick13 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 28/08/2004, 12h30

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