我需要在数组中插入一个值...理想情况下我可以从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();
我的问题是......这是否具有远程效率?有没有更好的方法去做我需要完成的事情?
答案 0 :(得分:7)
我认为你可以节省一些时间
var newArray = new myObj[oldArray.Length + 1];
oldArray.CopyTo(newArray, 1);
newArray[0] = InsertRecord(myParam);
答案 1 :(得分:3)
List<T>
类由数组支持,因此使用List在索引0处插入和使用数组在索引0处插入之间的性能没有区别,除了BCL开发人员已经测试了很远更广泛的表现。不要考虑ToList
方法和List<T>
构造函数的性能影响,因为无论如何都会在幕后发生新的数组分配。
更糟糕的是,您可能需要使用已发布的代码进行两个数组分配,因为List<T>
构造函数(由ToList调用)可能会分配一个大小为array
的数组,然后Add
方法必须分配一个新数组只是为了执行插入。不太可能,但可能。
简而言之,自己分配新阵列。
修改强>
鉴于您的方法需要返回一个数组,所以通过列表完全没有任何意义。使用列表,您将要将原始数组复制到支持List<T>
的数组中,然后插入,然后将该支持数组复制到另一个要从您的方法返回的数组中。这使得两个阵列分配最小,加上我上面提到的可能的第三个。使用原始数组只保证一个数组分配。