首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq ToList/ToArray/

Linq ToList/ToArray/
EN

Stack Overflow用户
提问于 2013-02-23 15:11:07
回答 1查看 16.9K关注 0票数 23

嗯,我遇到许多情况,其中有一个IEnumerable是不够的。但是,我不确定上述方法调用的性能。

我真正想问的是:

是ToList/ToArray的性能:

  1. 将IEnumerable复制到新的数组/列表的O(n)操作?
  2. 如果我在列表上调用linq扩展方法,那么如果我调用ToList,它具有O(1)性能,而如果调用ToArray,则具有O(n)性能(如果我的原始列表是数组,则相反)。
  3. 一些魔术发生了,表现为O(1)?

可能是O(n),对吧?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-23 15:19:11

ToList/ToArray的性能是否是将IEnumerable复制到新的数组/列表的O(n)操作?

是。ToList的效率略高一些,因为它不需要首先将内部缓冲区调整到正确的长度。

如果我在列表上调用linq扩展方法,那么如果我调用ToList,它具有O(1)性能,而如果调用ToArray,则具有O(n)性能(如果我的原始列表是数组,则相反)。

不是的。对于这两个调用,总是会创建一个新集合;这是原始集合的浅表副本。在任何ToList上调用ICollection<T>ToArray都比在不实现ICollection<T>的简单IEnumerable<T>上调用ICollection<T>更有效,就像已知的长度开始于集合一样。(不过,这是在执行时检测到的;您不需要担心编译时类型。)

可能是O(n),对吧?

假设哈希是合理的,它是O(N),是的。基本上,它以你可能期望的方式创建了一本新字典。

您可能想阅读我的Edulinq博客系列中的相应文章:

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

https://stackoverflow.com/questions/15041994

复制
相关文章

相似问题

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