将值插入数组的有效方法?

时间:2011-12-12 23:13:37

标签: c# arrays performance

我需要在数组中插入一个值...理想情况下我可以从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();

我的问题是......这是否具有远程效率?有没有更好的方法去做我需要完成的事情?

2 个答案:

答案 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>的数组中,然后插入,然后将该支持数组复制到另一个要从您的方法返回的数组中。这使得两个阵列分配最小,加上我上面提到的可能的第三个。使用原始数组只保证一个数组分配。