16

要素のリストがありますが、リスト要素の数が4より大きい場合は、すべての要素を削除しますが、最初の4つだけをリストに残します。

例:

リスト<>-1、2、3、4、5、6、7、8

新しいリストは-1、2、3、4である必要があります

List.RemoveAll()の使用を検討していますが、括弧に何を入れるべきかわかりません

いくつかの助けを楽しみにしています...。

スティーブン

4

4 に答える 4

28

使ってみませんかList.RemoveRange

if (list.Count > 4)
{
    list.RemoveRange(4, list.Count - 4);
}

(これは、既存のリストを変更することを前提としています新しいシーケンスを作成することに満足している場合はlist.Take(4)、呼び出しの有無にかかわらず、Adamの提案に従って間違いなく使用しToListます。最近は、既存のコレクションを変更するのではなく、クエリを作成する傾向があります。 )。

于 2012-05-10T09:40:06.010 に答える
11

または、古いアイテムを使用して新しいリストを作成することもできます。

var firstFour = myList.Take(4).ToList();

ただし、これにより新しいリストが作成されるため、元のリストから削除することとは異なります

または、あなたがする必要があるのがそれらを繰り返すことだけである場合、単に:の中にはありTakeません。ToListforeach

foreach (var item in myList.Take(4))

その後、実行が延期され、リストの作成にメモリを費やしていません。

補足として、linqおよびlinq拡張機能を使用すると、コードが意図をより明確に宣言していることがわかります。一目でわかるよりもはるかにlist.Take(4)読みやすくなっています。list.RemoveRange(4, list.Count - 4);コードの意図は、チームでの保守と作業にとって非常に重要です。

于 2012-05-10T09:40:20.583 に答える
1

これを試して

  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();
于 2012-05-10T09:50:06.233 に答える
0

TakeofLINQを使用します。

myList = myList.Take(4).ToList()

これにより、リストの最初の4つのアイテムが取得され、古いリストの代わりに新しいリストが割り当てられます。

「Takeはsourceを列挙し、count要素が生成されるか、sourceに要素が含まれなくなるまで要素を生成する」ため、他の回答のように長さを確認する必要はありません。礼儀アダムHouldsworth

于 2012-05-10T09:46:44.943 に答える