44 votes

Comment puis-je vérifier si une file d'attente est vide ?

En C#, comment puis-je vérifier si une file d'attente est vide ?

Je veux itérer à travers les éléments de la file d'attente et j'ai besoin de savoir quand m'arrêter. Comment puis-je y parvenir ?

0 votes

Quelle file d'attente utilisez-vous? Veuillez poster la définition de la file d'attente.

59voto

Jon Skeet Points 692016

En supposant que vous vouliez dire Queue, vous pourriez simplement utiliser :

if (queue.Count != 0)

Mais pourquoi s'embêter? Parcourez-le de toute façon, et s'il est vide, vous ne rentrerez jamais dans le corps :

Queue queue = new Queue();

// Il est bon d'utiliser foreach...
foreach (string x in queue)
{
    // Nous n'entrerons pas ici...
}

58 votes

Notez que l'approche foreach ne fonctionne pas si vous devez ajouter des éléments à la file d'attente pendant que vous traitez la file d'attente (par exemple, si vous implémentez un algorithme de BFS) car alors l'énumérateur serait invalidé. Utiliser la propriété Count est la bonne façon de procéder dans ce scénario.

1 votes

@DSO ne serait-il pas aussi invalidé si vous supprimez des éléments de la file d'attente ?

1 votes

Alors quel est l'intérêt d'utiliser une file d'attente si vous ne supprimez pas les éléments par Dequeue?

28voto

GregoryBrad Points 54

Je suggérerais d'utiliser la méthode Any(), car cela ne comptera pas toute la file d'attente, ce qui sera mieux en termes de performance.

Queue myQueue = new Queue();
    if(myQueue.Any()){
      //file d'attente non vide
    }

20 votes

@GregoryBad: myQueue.Count ne comptera pas sur l'ensemble de la file d'attente. La taille est stockée dans une variable privée de la classe Queue que la propriété Count retourne simplement voir Propriété Queue.Count. Le Count auquel vous faites référence est Count() dans l'espace de noms linq. Enumerable.Count

2 votes

@Rutix , Merci pour ça. Bon à savoir.

3 votes

@Rutix Même la méthode Enumerable.Count() est optimisée pour vérifier si elle peut être convertie en ICollection et renvoyer la propriété .Count sans énumérer.

9voto

vcsjones Points 51910

En supposant que vous vouliez dire System.Collections.Generic.Queue

if(yourQueue.Count != 0) { /* Quoi que ce soit */ }

devrait faire l'affaire.

3voto

LMW-HH Points 1153
    File test = new File();
    if(test.Count > 0){
      //file non vide
    }

2voto

Joe Points 17829

Il existe une méthode d'extension .Count() qui est disponible car Queue implémente IEnumerable.

Vous pouvez également faire _queue.Any() pour voir s'il y a des éléments dedans.

4 votes

Le second est mauvais, le premier est horrible. Utilisez la propriété queue.Count.

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