List<T>.RemoveAll(Predicate<T>) メソッド

定義

指定した述語によって定義される条件に一致するすべての要素を削除します。

public int RemoveAll (Predicate<T> match);

パラメーター

match
Predicate<T>

削除する要素の条件を定義する Predicate<T> デリゲート。

戻り値

List<T> から削除される要素の数。

例外

matchnullです。

次の例では、 RemoveAll メソッドと、ジェネリック デリゲートを使用する他のいくつかのメソッドを Predicate<T> 示します。

8 個の恐竜の名前を含む文字列の A List<T> が作成され、そのうちの 2 つは (位置 1 と 5 の位置) 末尾は "saurus" です。 この例では、 という名前 EndsWithSaurusの検索述語メソッドも定義します。このメソッドは、文字列パラメーターを受け取り、入力文字列が "saurus" で終わるかどうかを示すブール値を返します。

FindLast、、および FindAll メソッドはFind、検索述語メソッドを使用してリストを検索するために使用されます。

メソッドは RemoveAll 、"saurus" で終わるすべてのエントリを削除するために使用されます。 最初からリストを走査し、各要素を メソッドに順番に EndsWithSaurus 渡します。 メソッドが を返trueす場合、EndsWithSaurus要素は削除されます。

注意

C# と Visual Basic では、デリゲート (Predicate(Of String)Visual Basic では) をPredicate<string>明示的に作成する必要はありません。 これらの言語は、コンテキストから正しいデリゲートを推論し、自動的に作成します。

最後に、 メソッドは Exists 、"saurus" で終わる文字列がリスト内にないことを確認します。

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>();

        dinosaurs.Add("Compsognathus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Oviraptor");
        dinosaurs.Add("Velociraptor");
        dinosaurs.Add("Deinonychus");
        dinosaurs.Add("Dilophosaurus");
        dinosaurs.Add("Gallimimus");
        dinosaurs.Add("Triceratops");

        Console.WriteLine();
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nTrueForAll(EndsWithSaurus): {0}",
            dinosaurs.TrueForAll(EndsWithSaurus));

        Console.WriteLine("\nFind(EndsWithSaurus): {0}",
            dinosaurs.Find(EndsWithSaurus));

        Console.WriteLine("\nFindLast(EndsWithSaurus): {0}",
            dinosaurs.FindLast(EndsWithSaurus));

        Console.WriteLine("\nFindAll(EndsWithSaurus):");
        List<string> sublist = dinosaurs.FindAll(EndsWithSaurus);

        foreach(string dinosaur in sublist)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine(
            "\n{0} elements removed by RemoveAll(EndsWithSaurus).",
            dinosaurs.RemoveAll(EndsWithSaurus));

        Console.WriteLine("\nList now contains:");
        foreach(string dinosaur in dinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nExists(EndsWithSaurus): {0}",
            dinosaurs.Exists(EndsWithSaurus));
    }

    // Search predicate returns true if a string ends in "saurus".
    private static bool EndsWithSaurus(String s)
    {
        return s.ToLower().EndsWith("saurus");
    }
}

/* This code example produces the following output:

Compsognathus
Amargasaurus
Oviraptor
Velociraptor
Deinonychus
Dilophosaurus
Gallimimus
Triceratops

TrueForAll(EndsWithSaurus): False

Find(EndsWithSaurus): Amargasaurus

FindLast(EndsWithSaurus): Dilophosaurus

FindAll(EndsWithSaurus):
Amargasaurus
Dilophosaurus

2 elements removed by RemoveAll(EndsWithSaurus).

List now contains:
Compsognathus
Oviraptor
Velociraptor
Deinonychus
Gallimimus
Triceratops

Exists(EndsWithSaurus): False
 */

注釈

Predicate<T>は、渡されたオブジェクトがデリゲートで定義されている条件と一致する場合に を返すtrueメソッドへのデリゲートです。 現在 List<T> の 要素はデリゲートに個別に渡され、条件に Predicate<T> 一致する要素は から List<T>削除されます。

このメソッドは線形検索を実行します。したがって、このメソッドは O(n) 操作であり、 nCountです。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

こちらもご覧ください