首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建列表,然后将其转换为数组

创建列表,然后将其转换为数组
EN

Stack Overflow用户
提问于 2015-04-01 08:44:40
回答 5查看 104关注 0票数 2

数组非常快,但是您不能添加任何数组,另一方面,列表非常方便,您可以不必担心地添加新项,但是它们要慢得多,我首先使用列表添加项目,然后通过MyList.ToArray()将其转换为数组,然后处理数组中的数据。现在我在想,这真的是有效的速度吗?还是我只是在浪费更多的时间转换成数组?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-04-01 08:59:19

MSDN说ToArray是O(N),其中N是计数:https://msdn.microsoft.com/en-us/library/x303t819%28v=vs.110%29.aspx

元素是使用Array.Copy复制的,这是一个O(n)操作,其中n是计数。 这个方法是一个O(n)运算,其中n是计数。

因此,您基本上要处理列表两次:一次用于ToArray调用,另一次在您的下一个循环中实际处理列表。在大多数情况下,删除ToArray可能比执行转换更具有性能。

票数 5
EN

Stack Overflow用户

发布于 2015-04-01 09:05:15

按索引访问数组元素比按索引访问列表元素要快。原因可以在.NET框架的源代码中找到。每次对list元素的访问都会导致显式范围检查。即使在最明显的情况下(从0list.Count的循环循环),当前的JIT也无法对其进行优化。

将列表转换为数组的代价是一次性的O(N) .这一代价不是微不足道的。您必须大量访问数组,才能摊销成本。

我不能告诉你临界点在哪里。这是必须衡量的。作为一个主观的猜测,我会说,重复10-100次的集合将使这是值得的。

TL;DR:如果你经常使用数组,那么这会有回报的。通常,这种技术要么有害,要么浪费开发人员的时间。

票数 3
EN

Stack Overflow用户

发布于 2015-04-01 08:57:44

因为调整数组大小的时间很长,所以当我必须选择list数组时,我问自己的唯一鉴别问题是:集合的大小是固定的吗?

  • 是的:使用数组
  • 不:用一张清单

现在说你用了一个列表。正如Jun所说,在使用数组之前将其转换为数组是不必要的。

除非您在数据中运行了大量的时间(并且像usr所说的那样,转换是足够摊销的),转换应该只在必要时进行(需要数组的第三方API调用)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29386398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档