num < .Count()ではなく.Skip(num).Any()の勧め
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の要素数を求められる場合は、そちらを使ったほうが良いです。
Author And Source
この問題について(num < .Count()ではなく.Skip(num).Any()の勧め), 我々は、より多くの情報をここで見つけました https://qiita.com/isishizuka/items/d8f3e5219fa933ee7f6f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .