How to get items in a specific range (3 - 7) from list?

C#List

C# Problem Overview


What would be the most efficient way to select all the items in a specific range from a list and put it in a new one?

List<DataClass> xmlList = new List<DataClass>();

This is my List, and I would like to put all the DataClass items between the range (3 - 7) in a new List.

What would be the most efficient way? A foreach loop that that count++ everytime untill he reaches the items between a the range and add those items to the new list?

C# Solutions


Solution 1 - C#

The method you are seeking is GetRange:

List<int> i = new List<int>();
List<int> sublist = i.GetRange(3, 4);

var filesToDelete = files.ToList().GetRange(2, files.Length - 2);

From the summary:

// Summary:
//     Creates a shallow copy of a range of elements in the source System.Collections.Generic.List<T>.
// Parameters:
//   index:
//     The zero-based System.Collections.Generic.List<T> index at which the range
//     starts.
//   count:
//     The number of elements in the range.

Solution 2 - C#

If for any reason you don't like to use the GetRange method, you could also write the following using LINQ.

List<int> list = ...
var subList = list.Skip(2).Take(5).ToList();

Solution 3 - C#

List implements a CopyTo method that lets you specify the start and number of elements to copy. I'd suggest using that.

See: http://msdn.microsoft.com/en-us/library/3eb2b9x8.aspx

Solution 4 - C#

in c# 8 you can use Range and Index instead of Linq take and skip :

> Sample array:

string[] CountryList = { "USA", "France", "Japan", "Korea", "Germany", "China", "Armenia"};  

> To get this result (element 1,2,3) ==> France Japan Korea

> 1: Get a range of array or list:

   var NewList=CountryList[1..3]

> 2: Define Range object

Range range = 1..3;  
    var NewList=CountryList[range])

> 3: Use Index Object

Index startIndex = 1;  
Index endIndex = 3;  
var NewList=CountryList[startIndex..endIndex]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNielsView Question on Stackoverflow
Solution 1 - C#LightStrikerView Answer on Stackoverflow
Solution 2 - C#ClemensView Answer on Stackoverflow
Solution 3 - C#Matt BurlandView Answer on Stackoverflow
Solution 4 - C#Hamed NaeemaeiView Answer on Stackoverflow