私はこの質問といくつかの同様の質問を閲覧していました:
私が読んだ多くの場所はこのような答えです:
私が疑問に思っているのは、SkipとTakeが配列の定数時間操作ではない理由です。
同様に、それらが定数時間の操作である場合、Skip and Takeメソッド(最後にToArray()を呼び出さない)は、Array.Copyを実行するオーバーヘッドなしで同じ実行時間を持ちますが、スペース効率も高くなりますか?
私はこの質問といくつかの同様の質問を閲覧していました:
私が読んだ多くの場所はこのような答えです:
私が疑問に思っているのは、SkipとTakeが配列の定数時間操作ではない理由です。
同様に、それらが定数時間の操作である場合、Skip and Takeメソッド(最後にToArray()を呼び出さない)は、Array.Copyを実行するオーバーヘッドなしで同じ実行時間を持ちますが、スペース効率も高くなりますか?
Skip
とTake
メソッドが実行する作業と、メソッドが返すデータを消費する作業を区別する必要があります。
Skip
およびメソッド自体はO(1)操作です。これTake
は、それらが行う作業が入力サイズに比例しないためです。配列からアイテムを返すことができる列挙子を設定するだけです。
列挙子を使用すると、作業が完了します。これはO(n)操作です。ここで、nは列挙子が生成するアイテムの数です。列挙子は配列から読み取るため、データのコピーは含まれていません。列挙子を使用している限り、配列内のデータをそのまま保持する必要があります。
Skip
(配列のようにインデックスでアクセスできないコレクションで使用する場合、最初のアイテムの取得はO(n)操作です。ここで、nはスキップされたアイテムの数です。)