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 :

Inverser les éléments d'une file (Queue<T>)


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Points : 160
    Points
    160
    Par défaut Inverser les éléments d'une file (Queue<T>)
    Soit une file Queue1 avec des objets 4 3 2 1.
    j'aimerais inverser Queue1 de manière à avoir dans la file 1 2 3 4.

    Avec un stylo bic rouge et du papier A4 J'ai réussi a trouver une solution assez barbare en utilisant 3 files temporaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                while (patches.Count > 0)
                {
                    while (temp2.Count > 0)
                        temp1.Enqueue(temp2.Dequeue());
     
                    temp2.Enqueue(patches.Dequeue());
                    while (temp1.Count > 0)
                    {
                        temp2.Enqueue(temp1.Dequeue());
                    }
                }
    mais je voudrais quelque chose de plus rapide ou sinon moins gourmand en mémoire, car s'il y a beaucoup d'objets dans la file ...

    EDIT : Je viens de voir un truc surprenant, soit le VC# est malade soit c'est moi qui comprend pas le concept.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                patches = temp2;
                temp1.Clear(); temp2.Clear();
    Le contenu de l'entité objet de type Queue temp2 sont assigné a l'entité objet de type patches.
    l'entité UNIQUE séparée objet de type Queue temp2 est vidée de son contenue. Ma Queue patches s'est aussi vidée ...

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si tu dois inverser la file, utilise autre chose car ce n'est pas vraiment fait pour. Tu peux par exemple utiliser une liste doublement chaînée (classe LinkedList<T>). Il te suffira de partir du premier ou du dernier élément suivant le besoin. Après tu peux encapsuler ça dans une classe LinkedQueue par exemple, avec un flag pour indiquer dans quel sens parcourir la "queue".

    Citation Envoyé par F.Saad
    soit le VC# est malade soit c'est moi qui comprend pas le concept
    C'est toi. Tu fais pointer patches sur temp2, donc patches et temp2 référencent le même objet. Le résultat est alors tout ce qu'il y a de plus logique.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Points : 160
    Points
    160
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Si tu dois inverser la file, utilise autre chose car ce n'est pas vraiment fait pour. Tu peux par exemple utiliser une liste doublement chaînée (classe LinkedList<T>). Il te suffira de partir du premier ou du dernier élément suivant le besoin. Après tu peux encapsuler ça dans une classe LinkedQueue par exemple, avec un flag pour indiquer dans quel sens parcourir la "queue".
    Pas possible, j'en ai besoin pour la file de téléchargement.
    C'est toi. Tu fais pointer patches sur temp2, donc patches et temp2 référencent le même objet. Le résultat est alors tout ce qu'il y a de plus logique.
    c'est pas dangereux ca ? comment faire pour que l'affectation soit définitive ?
    Copy to()?

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par F.Saad
    Pas possible, j'en ai besoin pour la file de téléchargement.
    Je ne vois pas en quoi ce n'est pas possible ? Une file c'est juste une liste avec comme seule règle premier entré premier sorti (FIFO). Il suffit donc d'avoir une liste interne et les méthode Enqueue / Dequeue.

    Par contre si tu as accès au framework 3.5, tu peux inverser beaucoup plus simplement avec la méthode d'extension Reverse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Queue<int> queue = new Queue<int>();
    ...
    queue = new Queue<int>(queue.Reverse());
    Citation Envoyé par F.Saad
    c'est pas dangereux ca ? comment faire pour que l'affectation soit définitive ?
    Tout est "dangereux" si on s'en sert n'importe comment. Si tu veux que patches et temp2 soient deux objets distincts il faudrait faire par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    patches = new Queue<MonType>(temp2);
    tu auras ainsi 2 files contenant les mêmes objets.

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

Discussions similaires

  1. Inverser les éléments d'une liste
    Par achta dans le forum Débuter
    Réponses: 7
    Dernier message: 15/07/2009, 09h50
  2. Trier les éléments d'une CListCtrl
    Par hanane_iaai dans le forum MFC
    Réponses: 21
    Dernier message: 15/10/2007, 04h52
  3. Réponses: 2
    Dernier message: 27/12/2005, 20h09
  4. [TestStand] Compter les éléments d'une chaîne de caractères
    Par capblans dans le forum Autres langages
    Réponses: 2
    Dernier message: 29/04/2005, 09h29
  5. Réponses: 2
    Dernier message: 11/08/2003, 09h43

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