将值插入数组的有效方法
本文关键字:有效 方法 数组 插入 | 更新日期: 2023-09-27 18:17:43
我需要插入一个值到数组…理想情况下,我可以从List<myObj>
开始,但是我需要使用的方法返回myObj[]
。
我总是需要插入一个值到第一个位置,而不是蠕虫值已经在数组中…我想出了如下的方案。
List<myObj> list = array.ToList<myObj>();
if (list.Count > 0 && list != null)
{
list.Insert(0, InsertRecord(myParam)); // InsertRecord() is one of my methods...
}
return list.ToArray();
我的问题是……这有那么一点效率吗?有没有更好的方法去做我需要完成的事情?
我认为你可以节省一些时间
var newArray = new myObj[oldArray.Length + 1];
oldArray.CopyTo(newArray, 1);
newArray[0] = InsertRecord(myParam);
List<T>
类是由数组支持的,所以在索引0处使用List插入和在索引0处使用数组插入在性能上没有区别,只是BCL开发人员已经对性能进行了更广泛的测试。不要让ToList
方法和List<T>
构造函数的性能受到影响,因为新的数组分配无论如何都是在后台进行的。
更糟糕的是,您可能需要两个数组分配与您发布的代码,因为List<T>
构造函数(由ToList调用)可能会分配一个恰好与array
大小相同的数组,然后Add
方法必须分配一个新的数组来执行插入。不太可能,但有可能。
简而言之,自己分配新数组。
编辑:如果你的方法需要返回一个数组,那么遍历一个列表就没有任何意义了。使用列表,将原始数组复制到支持List<T>
的数组中,然后插入,然后将该支持数组复制到要从方法返回的另一个数组中。这使得两个数组分配最少,加上我上面提到的第三个。使用原始数组保证只分配一个数组。