2011-11-01 89 views
24

En C#, ¿cómo puedo verificar si una cola está vacía?¿Cómo puedo verificar si una cola está vacía?

Quiero iterar a través de los elementos de la cola, y necesito saber cuándo parar. ¿Cómo puedo lograr esto?

+0

qué cola utilizar? por favor publique la definición de cola. –

+0

¿Qué es Queue? ¿Qué contiene? –

+2

simplemente llame a la función que le dice si está vacía o no. (una respuesta sin código para una pregunta sin código) – musefan

Respuesta

38

Suponiendo que quiere decir que Queue<T>podría sólo tiene que utilizar:

if (queue.Count != 0) 

Pero ¿por qué preocuparse? Sólo iterar sobre todos modos, y si está vacío que no se consigue en el cuerpo:

Queue<string> queue = new Queue<string>(); 

// It's fine to use foreach... 
foreach (string x in queue) 
{ 
    // We just won't get in here... 
} 
+30

Tenga en cuenta que el enfoque foreach no funciona si necesita agregar elementos a la cola mientras procesa la cola (por ejemplo, si está implementando el algoritmo BFS) porque entonces el enumerador sería invalidado. Usar la propiedad Count es la forma correcta para este escenario. – DSO

+1

@DSO ¿no invalidaría también el enumerador si está eliminando elementos de la cola? – Jakotheshadows

+1

Entonces, ¿para qué sirve Cola si no quita los elementos de Dequeue? – titol

7

Suponiendo que quería decir System.Collections.Generic.Queue<T>

if(yourQueue.Count != 0) { /* Whatever */ } 

debe hacer el truco.

1

Puede comprobar si su propiedad Count es igual a 0.

3

Existe un método de extensión .Count() que está disponible porque Queue implementa IEnumerable.

También puede hacer _queue.Any() para ver si hay elementos en él.

+2

El segundo es malo, el primero es horrible. Use la propiedad queue.Count. –

3
Queue test = new Queue(); 
    if(test.Count > 0){ 
     //queue not empty 
    } 
0

si utiliza cola (System.Collections.Generic.Queue) entonces

Queue<String> QST; 
... 
int numberOfElement = QST.Count(); 
+4

Usar Qst.Count - O (1) - no Qst.Count() - O (n). –

13

se recomienda usar el método Cualquier(), ya que esto no va a hacer un recuento de toda la cola, que será mejor en términos de rendimiento.

Queue myQueue = new Queue(); 
    if(myQueue.Any()){ 
     //queue not empty 
    } 
+8

@GregoryBad: 'myQueue.Count' no hará un recuento de toda la cola. El tamaño se almacena en una variable privada en la clase Queue que la propiedad Count solo devuelve ver [Queue .Count Property] (http://msdn.microsoft.com/en-us/library/fy0wwyz4.aspx). El Count que quieres decir es Count() en el espacio de nombres linq. [Enumerable.Count] (http://msdn.microsoft.com/en-us/library/bb338038.aspxt) – Rutix

+0

@Rutix, gracias por esto. Bueno saber. – GregoryBrad

+1

@Rutix Incluso el método Enumerable.Count() está optimizado para comprobar si se puede convertir a ICollection y devolver la propiedad .Count sin enumerar. –

Cuestiones relacionadas