简体   繁体   中英

How to skip first few elements from array?

I have an array with total 5000 elements and at one functionality, I only need last 3000 elements only to proceed further.

for that I have tried following solution.

//skipping first 2000 elements
list = list.Skip(5000 - 3000).ToArray();

This solution is actually giving me desired solution, but when I ran profiler on my code, It is showing huge amount memory allocation on this line.

I have to use Array only due to carried on legacy. and very frequent ToArray() doesn't seem to be good for performance.

there is also possible solution,

//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);

but this is even worse in time complexity.

Is there any better solution for this, which doesn't need casting from List to Array ?

If you absolutely have to use an array, then Array.Copy is probably your friend:

int[] smallerArray = new int[array.Length - 2000];
Array.Copy(array, 2000, smallerArray, 0, smallerArray.Length);

I'd expect that to be a bit more efficient than using Take followed by ToArray .

If list is a List<> you can use List.GetRange :

int lastN = 3000;
var sublist = list.GetRange(list.Count - lastN, lastN);
var array = sublist.ToArray();

This is more efficient because List.ToArray uses Array.Copy .


If list is an int[] as commented it's even more efficient:

int lastN = 3000;
int[] result = new int[lastN];
Array.Copy(list, list.Length - lastN, result, 0, lastN); 

你可以使用Skip(提供你要排除的号码).ToArray();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM