gpt4 book ai didi

c# - Array.Copy vs Skip and Take in c#

转载 作者:太空狗 更新时间:2023-10-29 23:17:49 25 4
gpt4 key购买 nike

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

Getting a sub-array from an existing array

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

Getting a sub-array from an existing array

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

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

最佳答案

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

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

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

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

关于c# - Array.Copy vs Skip and Take in c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7359496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com