C# 中的 Array.Copy 与 Skip 和 Take

发布于 2024-12-03 14:40:07 字数 476 浏览 0 评论 0原文

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

获取来自现有数组的子数组

在很多地方我读到的答案如下:

从现有数组获取子数组< /a>

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

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

I was browsing this question and some similar ones:

Getting a sub-array from an existing array

Many places I read answers like this:

Getting a sub-array from an existing array

What I am wondering is why Skip and Take are not constant time operations for arrays?

In turn, if they were constant time operations, won't the Skip and Take method (without calling ToArray() at the end) have the same running time without the overhead of doing an Array.Copy, but also more space efficient?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只怪假的太真实 2024-12-10 14:40:07

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

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

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

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

You have to differentiate between the work that the Skip and Take methods do, and the work of consuming the data that the methods return.

The Skip and Take methods themselves are O(1) operations, as the work they do does not scale with the input size. They just set up an enumerator that is capable of returning items from the array.

It's when you use the enumerator that the work is done. That is an O(n) operation, where n is the number of items that the enumerator produces. As the enumerators read from the array, they don't contain a copy of the data, and you have to keep the data in the array intact as long as you are using the enumerator.

(If you use Skip on a collection that is not accessible by index like an array, gettting the first item is an O(n) operation, where n is the number of items skipped.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文