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では、Linqの代わりに範囲とインデックスを使用できます。

サンプル配列:

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 に答える