63

从列表中选择特定范围内的所有项目并将其放入新列表中的最有效方法是什么?

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

这是我的列表,我想将范围 (3 - 7) 之间的所有 DataClass 项目放入一个新列表中。

什么是最有效的方法?每次计数++的foreach循环,直到他到达范围之间的项目并将这些项目添加到新列表中?

4

4 回答 4

108

您正在寻找的方法是GetRange

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

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

从总结:

// 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.
于 2012-10-30T14:58:23.393 回答
37

如果出于某种原因您不喜欢使用 GetRange 方法,您也可以使用LINQ编写以下代码。

List<int> list = ...
var subList = list.Skip(2).Take(5).ToList();
于 2012-10-30T15:01:03.083 回答
1

List 实现了一种CopyTo方法,可让您指定要复制的元素的开始和数量。我建议使用它。

请参阅:http: //msdn.microsoft.com/en-us/library/3eb2b9x8.aspx

于 2012-10-30T14:57:31.067 回答
1

在 c# 8 中,您可以使用 Range 和 Index 而不是 Linq take 和 skip :

样本数组:

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

得到这个结果(元素 1,2,3)==> 法国 日本 韩国

1:获取数组或列表的范围:

   var NewList=CountryList[1..3]

2:定义范围对象

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

3:使用索引对象

Index startIndex = 1;  
Index endIndex = 3;  
var NewList=CountryList[startIndex..endIndex]
于 2019-03-15T10:09:34.573 回答