如何跳过数组中的前几个元素?

Ami*_*mit 1 c# arrays optimization memory-management winforms

我有一个共有5000个元素的数组,在一个功能中,我只需要最后3000个元素才能继续进行.

为此,我尝试了以下解决方案.

//skipping first 2000 elements
list = list.Skip(5000 - 3000).ToArray();
Run Code Online (Sandbox Code Playgroud)

这个解决方案实际上给了我想要的解决方案,但是当我在我的代码上运行分析器时,它在这一行显示了大量的内存分配.

由于遗留下来,我必须使用Array.并且非常频繁ToArray()似乎对性能没有好处.

还有可能的解决方案,

//reversing whole list
Array.Reverse(list);
//restricting size of an array to 3000,
//so first (as reversed the list, they are last 3000 elements) 
Array.Resize(ref list, 3000);
//again reversing list to make it proper order
Array.Reverse(list);
Run Code Online (Sandbox Code Playgroud)

但是时间复杂度更差.

有没有更好的解决方案,不需要从List到Array?

Jon*_*eet 6

如果你绝对必须使用数组,那么Array.Copy可能是你的朋友:

int[] smallerArray = new int[array.Length - 2000];
Array.Copy(array, 2000, smallerArray, 0, smallerArray.Length);
Run Code Online (Sandbox Code Playgroud)

我希望它比使用Take后续效率更高效ToArray.