嗯,我遇到许多情况,其中有一个IEnumerable是不够的。但是,我不确定上述方法调用的性能。
我真正想问的是:
是ToList/ToArray的性能:
可能是O(n),对吧?
发布于 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博客系列中的相应文章:
ToListToArrayToDictionaryhttps://stackoverflow.com/questions/15041994
复制相似问题