在 C# 中,有没有办法直接从数组创建 List 而无需复制?

詹姆斯·霍克斯

C# 是否提供了一种直接从数组创建列表而无需逐个复制元素的方法?

我知道在底层,列表只是维护一个数组,所以从一个数组开始并创建一个新列表在内部简单地指向该数组似乎很自然。将数组转换为列表时,这样做的好处是性能的巨大提升。

在 C# 中是否有一种本地方法可以做到这一点?如果没有,是否有人有扩展方法或库来执行此操作?

彼得要求量化“性能的巨大收益”。所以这里是基于我对 List 构造函数如何工作的理解:

List() 包含三个重载。重载之一将 IEnumerable 作为输入。此重载通过声明一个非常小的新列表来工作(除非它在更新的 c# 版本中已更改,历史默认大小为 0,然后在首次添加元素时初始化为 4)。

每次将元素添加到列表中,如果新元素超过容量,则通过创建一个全新的数组并将元素一个一个地复制到新数组来使数组大小增加一倍。这样做的结果是,从 IEnumerable 构建 List 的成本是 O(n) 加上发生的所有数组副本的成本。重点是,它不小。

对于 IEnumerable,List() 构造必须以这种方式工作,因为 IEnumerable 的大小未知。如果你从一个数组创建一个 List,你会在创建时知道确切的大小,这意味着成本应该是 O(1)。

乔尔·科霍恩

不可以,因为 List 对象需要能够控制数组。如果您有对 List 之外的数组的引用,它将失去该保证。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法用输入的维度初始化二维数组中的所有项目,而无需在 C++ 中循环?

有没有办法在C ++编译器中禁用复制省略

有没有办法在C ++中进行就地成员构造(无需复制和销毁对象)?

有没有办法在 C++ 中创建一个组合函数的数组?

我的所有方法都需要通用包装,而无需复制代码(C#)

有没有办法对 JSON 对象进行排序而无需重新排序其中的数组?

有没有办法将golang字符串直接复制到预先分配的C char缓冲区

有没有其他方法可以在C ++中填充数组而无需向量

CodeGo.net>有没有办法克隆具有值类型的数组,而无需创建新的引用类型?

有没有办法通过 node.js 直接读取存储桶 Google Cloud Datastore 中的 JSON 文件的内容,而无需事先下载?

有没有办法从 arma::mat 矩阵创建 std::vector<arma::mat> 而无需创建矩阵的副本?

有没有办法复制orbeon中的部分?

有没有办法在htop中复制文本?

有没有办法在Dreamweaver中复制代码?

有没有办法将数据存储到 json 数组,而无需在 javascript 中删除以前存储在 json 数组中的数据?

有没有办法在 C 中创建动态类型分配

有没有办法在C ++中创建未知数量的变量的构造函数?

有没有办法在 C++ 中创建类型变量?

有没有办法在 Xamarin C# 中的 ListView 列上方创建列名

在 C# 中,有没有办法将属性与数组一起使用?

有没有办法在C标准库中以向量化形式表示数组?

有没有办法在C ++中对整个数组进行排序

有没有办法在C#数组中更改元组值?

有没有办法在C ++中复合函数?

有没有办法在 C 中倒带 stdin?

有没有一种方法可以直接在C#中对值求和,而无需访问cosmosDB并运行查询?

有没有办法创建变量来存储数据库中列的值,而无需在 pymysql 中多次执行相同的查询?

有没有办法在循环中保存多个图而无需在python中覆盖?

有没有办法编辑多对多关系船而无需在Laravel中附加-分离