12 votes

Comment insérer des éléments dans une file d'attente en C#

En C#, j'utilise une collection Queue. Je peux facilement Enqueue ou Dequeue. D'accord, maintenant j'aimerais insérer quelque chose au milieu de la file d'attente ou au début de la file d'attente. Je ne trouve aucune méthode pour faire cela. Que recommandez-vous comme collection alternative?

31voto

Pavel Minaev Points 60647

Une file d'attente, par définition, est quelque chose à laquelle vous ne pouvez que ajouter et retirer des choses. Si vous voulez insérer au milieu, vous voulez alors une liste complète (probablement LinkedList), pas une Queue.

Je veux dire, vous ne tenteriez pas de "vous insérer" au milieu de la file d'attente dans un supermarché (j'espère); cela fonctionne de la même manière ici.

18voto

Andrew Koester Points 8718

Ce que vous cherchez est un LinkedList. Vous pouvez ajouter au début, au milieu (en utilisant AddBefore ou AddAfter), ou à la fin de la liste.

C'est avantageux par rapport à l'utilisation d'une List car vous pouvez ensuite utiliser RemoveFirst ou RemoveLast pour imiter plus étroitement une Queue ou une Stack.

8voto

Anthony Nichols Points 898

Alors que les réponses sur cette page sont correctes si vous vous trouvez dans une position où vous ne pouvez pas utiliser autre chose qu'une file d'attente, vous pouvez (avec un peu de surcharge) ajouter un élément au milieu d'une file d'attente. Que cela devrait être fait ou non est une autre histoire.

var myQueue = new Queue();
myQueue.Enqueue("élément 0");
myQueue.Enqueue("élément 10");

var myList = myQueue.ToList();
myList.Insert(1, "élément 5");

myQueue = new Queue(myList);

2voto

epotter Points 3235

Vous devrez probablement utiliser une liste.

2voto

Matt Ball Points 165937

Le but d'une file d'attente est de fournir une abstraction d'interface FIFO (premier entré, premier sorti). Si vous voulez être capable d'interagir avec votre structure de données de manière non file d'attente, n'utilisez pas une file d'attente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X