hs
HashSetが空であるかどうかを知りたいだけです。含まれる要素の数を正確に知ることには興味がありません。
だから私はこれを使うことができます:
bool isEmpty = (hs.Count == 0);
...またはこれ:
bool isEmpty = hs.Any(x=>true);
パフォーマンス面で (特に HashSet に多数の要素が含まれている場合)、どちらがより良い結果を提供しますか?
hs
HashSetが空であるかどうかを知りたいだけです。含まれる要素の数を正確に知ることには興味がありません。
だから私はこれを使うことができます:
bool isEmpty = (hs.Count == 0);
...またはこれ:
bool isEmpty = hs.Any(x=>true);
パフォーマンス面で (特に HashSet に多数の要素が含まれている場合)、どちらがより良い結果を提供しますか?
HastSet<T>
ICollection<T>
これにはCount
プロパティがあるため、 への呼び出しはCount()
単に を呼び出しますHastSet<T>.Count
。これは O(1) 操作であると想定しています (つまり、実際にはカウントする必要はありません- の現在のサイズを返すだけですHashSet
)。
Any
条件に一致するアイテムが見つかるまで繰り返し、その後停止します。
したがって、あなたの場合、1つのアイテムを反復して停止するだけなので、違いはおそらく無視できます。
適用したいフィルタx => x.IsValid
(例: )Any
がある場合は、コレクション全体を反復処理するため、確実に高速になりますが、一致が見つかるとすぐに停止します。Count(x => x.IsValid)
Any
これらの理由から、より直接的であり、潜在的なパフォーマンスの問題を回避できるため、私は一般的に を使用することを好みAny()
ますCount()==0
。よりもパフォーマンスが大幅にCount()==0
向上した場合にのみ、に切り替えます。Any()
Any(x=>true)
を呼び出すことと論理的に同じであることに注意してくださいAny()
。それはあなたの質問を変えるものではありませんが、ラムダがなければきれいに見えます。