14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

num < .Count()ではなく.Skip(num).Any()の勧め

Posted at

num < .Count() というコードを見かけたので書いてみた。

.Skip(num).Any() を勧める理由としては、

  • .Count()ではIEnumerableの要素全体を辿るのに対し、.Skip(num)ではIEnumerableの要素をnum個だけ辿って終わる。

このとき、IEnumerableの要素数がnumより小さい場合でSkip(num) をしたとしても、IEnumerableの終端にたどり着いた時点でそれ以上は廻らないため無駄がない。

  • .Count()を使う場合、IEnumerableの要素全体を廻る必要があるため無限シーケンスを扱えないが、.Skip(num).Any()なら無限シーケンスを扱える。

という点が挙げられます。念のため2つ書きましたが、両方とも同じことに対して言葉を変えて言っているだけなので、片方が頭にあれば問題ないです。


補足)

  • Count(), Skip()もO(n)で、オーダーの視点から考えたらどちらでも問題はないので、無限シーケンスを扱うのでなければnum<.Count()でも良いと思います。(こっちのほうが視認性が良いという人もいるでしょうし)
  • 当然、O(n)以下の計算量でIEnumerableの要素数を求められる場合は、そちらを使ったほうが良いです。
14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?