要素のリストがありますが、リスト要素の数が4より大きい場合は、すべての要素を削除しますが、最初の4つだけをリストに残します。
例:
リスト<>-1、2、3、4、5、6、7、8
新しいリストは-1、2、3、4である必要があります
List.RemoveAll()の使用を検討していますが、括弧に何を入れるべきかわかりません
いくつかの助けを楽しみにしています...。
スティーブン
使ってみませんかList.RemoveRange
:
if (list.Count > 4)
{
list.RemoveRange(4, list.Count - 4);
}
(これは、既存のリストを変更することを前提としています。新しいシーケンスを作成することに満足している場合はlist.Take(4)
、呼び出しの有無にかかわらず、Adamの提案に従って間違いなく使用しToList
ます。最近は、既存のコレクションを変更するのではなく、クエリを作成する傾向があります。 )。
または、古いアイテムを使用して新しいリストを作成することもできます。
var firstFour = myList.Take(4).ToList();
ただし、これにより新しいリストが作成されるため、元のリストから削除することとは異なります。
または、あなたがする必要があるのがそれらを繰り返すことだけである場合、単に:の中にはありTake
ません。ToList
foreach
foreach (var item in myList.Take(4))
その後、実行が延期され、リストの作成にメモリを費やしていません。
補足として、linqおよびlinq拡張機能を使用すると、コードが意図をより明確に宣言していることがわかります。一目でわかるよりもはるかにlist.Take(4)
読みやすくなっています。list.RemoveRange(4, list.Count - 4);
コードの意図は、チームでの保守と作業にとって非常に重要です。
これを試して
List<string> lstTest = new List<string>();
lstTest.Add("test1");
lstTest.Add("test2");
lstTest.Add("test3");
lstTest.Add("test4");
lstTest.Add("test5");
lstTest.Add("test6");
lstTest.RemoveRange(4, lstTest.Count - 4);
foreach (string item in lstTest)
{
Console.Write(item);
}
Console.ReadLine();
TakeofLINQを使用します。
myList = myList.Take(4).ToList()
これにより、リストの最初の4つのアイテムが取得され、古いリストの代わりに新しいリストが割り当てられます。
「Takeはsourceを列挙し、count要素が生成されるか、sourceに要素が含まれなくなるまで要素を生成する」ため、他の回答のように長さを確認する必要はありません。礼儀アダムHouldsworth