C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のRemoveAllメソッドで述語に一致するリストの全要素を削除する方法

C#では、List<T>.RemoveAll()メソッドを使用することで、述語(Predicate)で定義された条件に一致するすべての要素を、リストから一度に削除できます。条件に合致する要素が複数あっても、自分でループを書く必要はありません。

RemoveAllメソッドとは

RemoveAllメソッドは、引数としてPredicate<T>デリゲートを受け取ります。このデリゲートがtrueを返す要素だけがリストから削除され、削除された要素の個数が戻り値として返されます。

例1:値「500」の要素をすべて削除する

まずは、リスト内の「500」という値を持つ要素をすべて削除する基本的な例を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
   private static bool demo(int i){
      return (i == 500);
   }
   public static void Main(String[] args){
      List<int> list = new List<int>();
      list.Add(100);
      list.Add(500);
      list.Add(300);
      list.Add(400);
      list.Add(500);
      list.Add(600);
      list.Add(500);
      Console.WriteLine("List elements...");
      foreach (int i in list){
         Console.WriteLine(i);
      }
      Console.WriteLine(" ");
      list.RemoveAll(demo);
      Console.WriteLine("List after removing elements 500...");
      foreach (int i in list){
         Console.WriteLine(i);
      }
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

List elements...
100
500
300
400
500
600
500

List after removing elements 500...
100
300
400
600

このように、値が「500」である3つの要素がすべて削除され、それ以外の要素だけが残ります。

例2:10の倍数の要素をすべて削除する

続いて、述語の条件を変えて、「10で割り切れる要素」をすべて削除する例を確認してみましょう。

using System;
using System.Collections.Generic;
public class Demo {
   private static bool demo(int i){
      return ((i % 10) == 0);
   }
   public static void Main(String[] args){
      List<int> list = new List<int>();
      list.Add(100);
      list.Add(295);
      list.Add(355);
      list.Add(450);
      list.Add(550);
      Console.WriteLine("List elements...");
      foreach (int i in list){
         Console.WriteLine(i);
      }
      Console.WriteLine(" ");
      list.RemoveAll(demo);
      Console.WriteLine("List after removing elements...");
      foreach (int i in list){
         Console.WriteLine(i);
      }
   }
}

出力結果

実行すると、以下の出力が得られます。

List elements...
100
295
355
450
550

List after removing elements...
295
355

10で割り切れる「100」「450」「550」が削除され、割り切れない「295」と「355」のみが残っていることがわかります。

まとめ

  • RemoveAllメソッドは、Predicateデリゲートがtrueを返すすべての要素をリストから削除する
  • 削除された要素の個数は、メソッドの戻り値として取得できる
  • 条件を満たす要素が複数あっても、一括で効率的に削除できる
  • ラムダ式を使えば、list.RemoveAll(i => i == 500); のようにメソッドを別途定義せずに条件をその場で記述することも可能
  1. C#でリストから重複要素を削除する方法【Distinct()メソッドの使い方】

    C#でリスト(List)から重複する要素を削除したい場合、LINQのDistinct()メソッドを使うのが最もシンプルで効率的な方法です。この記事では、基本的な手順をサンプルコードとともに分かりやすく解説します。 手順1:リストを宣言して要素を追加する まず、リストを宣言し、要素を追加します。ここでは、意図的に同じ値「50」を2回追加しています。 List<int> list = new List<int>(); list.Add(50); list.Add(90); list.Add(50); list.Add(100); 手順2:Distinct()メソッドで重複を

  2. JavaでArrayListのすべての要素を削除する方法(clearメソッドの使い方)

    JavaのArrayListからすべての要素を一括で削除したい場合は、clear()メソッドを使用します。この記事では、実際のコード例を通じて、ArrayListの全要素を削除する手順をわかりやすく解説します。1. 要素を持つArrayListを作成するまず、複数の要素を格納したArrayListを用意しましょう。以下の例では、Integer型のArrayListに7つの数値を追加しています。ArrayList<Integer> arrlist = new ArrayList<Integer>(5); arrlist.add(25); arrlist.add(50);