web-dev-qa-db-ja.com

Stack <T>が空かどうかを確認する方法

Stack<T>.Count() == 0を除いて、Stack<T>は空ですか?

「スタック」クラスには、一般的に Java-Stack.empty のような専用の「空の」メソッドがあるようなC++/Javaの背景から来ています。

23
BobsunShirov

.Count() == 0を使用する代わりに、単に.Count == 0。これは、linq拡張メソッドではなく、スタックのプロパティを使用しています。

37
recursive

3つの一般的なアプローチがあり、通常、どちらを使用するかは好みの問題です。

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

さまざまなアプローチのプロファイリング このように見える

Benchmark

.Any()および.Count()は、_.Count_...よりも10x-20x長くかかりますが、millisecond。したがって、_.Count > 0_は「はるかに高速」ですが、他のものはほとんどの状況で心配する必要がないほど十分に高速です。個人的にはAny()にこだわる方が読みやすいと思いますが、Countを選択することに対して誰にも気を遣わないでしょう。

4

独自の拡張メソッドも作成できます

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

stack.Any()を使用できます。すべてのIEnumerable<T>オブジェクトの高速で読みやすい標準的な方法。

2
Soonil Hong