C# 是否提供了一种直接从数组创建列表而无需逐个复制元素的方法?
我知道在底层,列表只是维护一个数组,所以从一个数组开始并创建一个新列表在内部简单地指向该数组似乎很自然。将数组转换为列表时,这样做的好处是性能的巨大提升。
在 C# 中是否有一种本地方法可以做到这一点?如果没有,是否有人有扩展方法或库来执行此操作?
彼得要求量化“性能的巨大收益”。所以这里是基于我对 List 构造函数如何工作的理解:
List() 包含三个重载。重载之一将 IEnumerable 作为输入。此重载通过声明一个非常小的新列表来工作(除非它在更新的 c# 版本中已更改,历史默认大小为 0,然后在首次添加元素时初始化为 4)。
每次将元素添加到列表中,如果新元素超过容量,则通过创建一个全新的数组并将元素一个一个地复制到新数组来使数组大小增加一倍。这样做的结果是,从 IEnumerable 构建 List 的成本是 O(n) 加上发生的所有数组副本的成本。重点是,它不小。
对于 IEnumerable,List() 构造必须以这种方式工作,因为 IEnumerable 的大小未知。如果你从一个数组创建一个 List,你会在创建时知道确切的大小,这意味着成本应该是 O(1)。
不可以,因为 List 对象需要能够控制数组。如果您有对 List 之外的数组的引用,它将失去该保证。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句