Array.Copy vs Skip and take in c#

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

Getting a sub-array from an existing array

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

Getting a sub-array from an existing array

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

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

解决方法:

您必须区分Skip和Take方法所做的工作,以及使用方法返回的数据的工作.

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

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

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

上一篇:C#随机挑选某一个用户或者几个用户信息


下一篇:SQLarchemy 实现外键及其四种约束讲解