コンテキスト:LINQ First/FirstOrDefaultは列挙可能な全体を反復処理しますか?
私はタイプIEnumerable<int>
の変数numbers
を持っています。
数字が昇順であるかどうかをチェックしたいと思います。
アルゴリズムは、だから私はprev
に格納する最初の要素を取得し、その次以降の数字に対してチェックしたかったです。
// numbers can contain "10, 20, 60, 50"
IEnumerable<int> numbers = TraverseInOrder(root);
int prev = numbers.FirstOrDefault();
foreach (var curr in numbers.Skip(1))
{
if (curr < prev) return false;
prev = curr;
}
return true;
質問 Iはnumbers.FirstOrDefault()
を用いprev
の値を設定し、また、次の要素から開始するforeach
に一つの要素(numbers.Skip(1))をスキップしています。以下のコードのための
ので、
numbers.FirstOrDefault()
numbers.Skip(1)
私はnumbers
を列挙アム二回O(2N)?意味FirstOrDefault
全体のリストを繰り返しますか? - または -
まだO(N)ですか? (
FirstOrDefault
のO(1)一定時間はSkip(1)
のO(N))
ソースコードを見てください。https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1033 – Nkosi
@Sung正しいですが、SOには多くの悪い質問があります彼らはドキュメントを読むことによって簡単に答えられているので、尋ねられてはならないはずです。それは、ドキュメントを読むことで簡単に答えられる質問をするのは大丈夫だということではありません。あなたがドキュメントの答えを調べたり、自分のコードを実行したり、それが何をしているのかわからないので、SOは質問をする場所ではありません。 – Servy
または単に 'int prev = int.MinValue' – Slai