リストから特定の範囲のすべてのアイテムを選択し、それを新しいものに入れる最も効率的な方法は何でしょうか?
List<DataClass> xmlList = new List<DataClass>();
これは私のリストであり、範囲(3〜7)の間にあるすべてのDataClassアイテムを新しいリストに入れたいと思います。
最も効率的な方法は何でしょうか?範囲内のアイテムに到達し、それらのアイテムを新しいリストに追加するまで、毎回カウント++するforeachループ?
あなたが探しているメソッドは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.
何らかの理由でGetRangeメソッドを使用したくない場合は、LINQを使用して次のように記述することもできます。
List<int> list = ...
var subList = list.Skip(2).Take(5).ToList();
Listは、CopyTo
コピーする要素の開始と数を指定できるメソッドを実装しています。それを使用することをお勧めします。
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]