Array.Copy vs Skip and take in c#

我正在浏览这个问题和一些类似的问题:

从现有arrays获取子arrays

很多地方我都读到这样的答案:

从现有arrays获取子arrays

我想知道为什么Skip和Take不是数组的恒定时间操作?

反过来,如果它们是常量时间操作,那么Skip和Take方法(最后没有调用ToArray())是否具有相同的运行时间而没有执行Array.Copy的开销,而且空间效率更高?

您必须区分SkipTake方法所做的工作,以及使用方法返回的数据的工作。

SkipTake方法本身是O(1)操作,因为它们所做的工作不会随输入大小而扩展。 他们只是设置了一个能够从数组中返回项目的枚举器。

当你使用枚举器完成工作时。 这是一个O(n)操作,其中n是枚举器产生的项目数。 当枚举器从数组中读取时,它们不包含数据的副本,只要您使用枚举器,就必须保持数组中的数据完整无缺。

(如果对像数组这样的索引无法访问的集合使用Skip ,则gettting第一项是O(n)操作,其中n是跳过的项目数。)