web-dev-qa-db-fra.com

Comment vérifier si une pile <T> est vide

Existe-t-il un autre moyen, à l'exception de Stack<T>.Count() == 0, de vérifier si un Stack<T> est vide?

Venant de l’arrière-plan C++/Java où les classes "stack" ont en général une sorte de méthode "est vide" dédiée, comme Java - Stack.empty .

19
BobsunShirov

Au lieu d'utiliser .Count() == 0, utilisez simplement .Count == 0. Ceci utilise la propriété de la pile plutôt que la méthode d'extension linq.

32
recursive

Vous pouvez aussi créer votre propre méthode d'extension

namespace System.Collection.Generic {
   public static class SystemEx {
        public static bool IsEmpty<T>(this Stack<T> stack) {
            return (stack.Count==0);
        }    
   }
4
Blau

Vous pouvez utiliser stack.Any(). Rapide, lisible et standard pour tous les objets IEnumerable<T>.

1
Soonil Hong

Il existe trois approches communes, et celle que vous utilisez sera généralement une question de goût.

if(!stack.Any()) ...
if(stack.Count() == 0) ...
if(stack.Count == 0) ...

Profiler les différentes approches ressemble à ceci :

 Benchmark

.Any() et .Count() prennent 10x à 20x plus longtemps que .Count... et peuvent toujours s'exécuter des dizaines de milliers de fois par milliseconde. Donc, .Count > 0 est "beaucoup plus rapide", mais les autres le sont encore assez rapidement pour ne pas avoir à s'inquiéter de la plupart des circonstances. Personnellement, je me contenterais de Any() puisque j’ai l’impression que cela se lit mieux, mais je ne voudrais pas critiquer quiconque pour choisir Count.

0
StriplingWarrior