我正在浏览这个问题和一些类似的问题:
从现有数组中获取子数组
我在很多地方读过这样的答案:
从现有数组中获取子数组
我想知道为什么 Skip 和 Take 不是数组的恒定时间操作?
反过来,如果它们是恒定时间操作,那么 Skip 和 Take 方法(最后不调用 ToArray())是否会具有相同的运行时间,而无需执行 Array.Copy 的开销,而且空间效率更高?
你必须区分不同的工作Skip
and Take
方法所做的工作,以及使用方法返回的数据的工作。
The Skip
and Take
方法本身是 O(1) 操作,因为它们所做的工作不会随输入大小而缩放。他们只是设置了一个能够从数组返回项目的枚举器。
当您使用枚举器时,工作就完成了。这是一个 O(n) 操作,其中 n 是枚举器生成的项目数。当枚举器从数组中读取时,它们不包含数据的副本,并且只要使用枚举器,就必须保持数组中的数据完整。
(如果您使用Skip
在无法通过索引访问的集合(如数组)上,获取第一项是 O(n) 操作,其中 n 是跳过的项数。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)