如何检查 Stack 是否为空

11 浏览
0 Comments

如何检查 Stack 是否为空

除了 Stack.Count() == 0 这种方式之外,还有其他的方法可以检查一个 Stack 是否为空吗?\n我来自于 C++/Java 的背景,那里的 \"stack\" 类通常有一些专门的 \"是否为空\" 方法,比如 Java - Stack.empty

0
0 Comments

如何检查Stack是否为空

有三种常见的方法,使用哪种方法通常是一种个人喜好。

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

对这些不同的方法进行性能测试,结果如下图所示:

![Benchmark](https://i.stack.imgur.com/yqlYY.png)

.Any()和.Count()的执行时间是.Count的10倍到20倍,并且在每毫秒内仍然可以执行数万次。所以.Count > 0的速度"要快得多",但是在大多数情况下,其他方法的速度仍然足够快,不需要过多担心。我个人喜欢使用.Any(),因为我觉得它的可读性更好,但是我不会对选择Count的人有任何异议。

更新

在打开优化的.NET 6中运行相同的LINQPad脚本后,发现!stack.Any()实际上比stack.Count() == 0更快,尽管它的速度仍然比stack.Count == 0慢一个数量级。我的初步评估保持不变。

![enter image description here](https://i.stack.imgur.com/Vp2YU.png)

感谢这个答案,特别是性能测试。:-) 我正在编写一个编译器,所以性能对我来说很重要。

0
0 Comments

使用Stack的IsEmpty()方法来检查堆栈是否为空是一种常见的操作。但有时候,我们可能想要自定义一个扩展方法来实现相同的功能。以上代码展示了如何创建一个名为IsEmpty()的扩展方法来检查堆栈是否为空。

该扩展方法是在System.Collection.Generic命名空间下的SystemEx类中定义的。它接受一个类型为Stack的参数,并返回一个布尔值来表示堆栈是否为空。在方法的实现中,它通过判断堆栈的Count属性是否等于0来确定堆栈是否为空。

尽管可以使用堆栈的自带方法IsEmpty()来检查堆栈是否为空,但有时我们可能想要自定义扩展方法来实现相同的功能。这可能是因为我们想要隐藏实现细节,或者因为我们认为自定义方法更加方便。

总结起来,以上代码展示了如何创建一个扩展方法来检查堆栈是否为空。这个扩展方法是在System.Collection.Generic命名空间下的SystemEx类中定义的,它接受一个类型为Stack的参数,并返回一个布尔值来表示堆栈是否为空。虽然可以使用堆栈的自带方法IsEmpty()来实现相同的功能,但有时我们可能想要自定义扩展方法来隐藏实现细节或提供更方便的操作方式。

0
0 Comments

使用.Count() == 0来判断一个Stack是否为空,可以改为使用.Count == 0。这样做是使用了堆栈的属性而不是linq扩展方法。\n只是为了提供信息:实际上这并没有太大的影响,因为Stack<T>实现了ICollection,在这种情况下,Enumerable.Count简单地使用了Count属性。\n我认为.Count.Count()更快。可以查看回答来证明

0