2011-11-01 53 views
24

C# 'da, bir Kuyruğun boş olup olmadığını nasıl kontrol edebilirim?Kuyruk boş olup olmadığını nasıl kontrol edebilirim?

Kuyruk öğesinin öğelerini yinelemek istiyorum ve ne zaman duracağımı bilmem gerekiyor. Bunu nasıl başarabilirim?

+0

hangi sıra kullanıyorsunuz? lütfen sıra tanımını gönderin. –

+0

Sıra Nedir? Ne içerir? –

+2

sadece boş olup olmadığını söyleyen işlevi çağırmanız yeterlidir. (kodsuz bir soru için kodsuz bir cevap) – musefan

cevap

38

Eğer sadece kullanma Queue<T> olabilir demek varsayarsak? Hemen yine de sürekli tekrarlanması ve içi boş olduğunda size vücuda olsun asla: onun Count özelliğini bir uzantısı yöntemi .Count yoktur 0.

+30

Not, kuyruğu işlerken kuyruğa herhangi bir öğe eklemeniz gerekiyorsa (örneğin BFS algoritması uyguluyorsanız) foreach yaklaşımı işe yaramaz. sayım geçersiz sayılır. Count özelliğini kullanmak bu senaryo için doğru yoldur. – DSO

+1

@DSO, sıradaki öğeleri kaldırıyorsanız numaralandırıcı da geçersiz sayılmaz mı? – Jakotheshadows

+1

Öğeleri Dequeue tarafından kaldırmıyorsanız, Queue özelliğini kullanmanın amacı nedir? – titol

7

Eğer hile yapmak gerekir

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

System.Collections.Generic.Queue<T> geliyordu varsayarsak.

if (queue.Count != 0) 

Ama neden rahatsız:

1

Sen (kontrol edebilirsiniz) o Queue IEnumerable uyguladığı için kullanılabilir.

Ayrıca içinde herhangi bir öğe olup olmadığını görmek için _queue.Any() öğesini de yapabilirsiniz.

3

eşitse

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

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

İkincisi kötü, ilki korkunç. Queue.Count özelliğini kullanın. –

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

sonra Kuyruk (System.Collections.Generic.Queue) kullanırsanız

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

Qst.Count - O (1) - değil Qst.Count() - O (n) kullanın. –

13

Ben tüm sıraya sayımını yapmayacağım bu gibi herhangi bir() yöntemini kullanarak öneririm, performans açısından daha iyi olacak.

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

@GregoryBad: 'myQueue.Count' tüm sıra boyunca bir sayı yapmayacaktır. Boyut, Count özelliğinin döndürdüğü özel bir değişkende saklanır. Bu değer yalnızca [Return .Count Property] (http://msdn.microsoft.com/en-us/library/fy0wwyz4.aspx). Demek istediğiniz saymak linq ad alanındaki Count(). [Enumerable.Count] (http://msdn.microsoft.com/en-us/library/bb338038.aspxt) – Rutix

+0

@Rutix, Bunun için teşekkürler. Bilmek güzel. – GregoryBrad

+1

@Rutix Enumerable.Count() yöntemi bile, ICollection'a yayınlanıp yayınlanmayacağını ve numaralandırmadan .Count özelliğini döndürüp döndürmeyeceğini kontrol etmek için optimize edilmiştir. –

İlgili konular