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

【C#】RemoveWhereメソッドで述語の条件に一致するHashSetの要素を削除する方法

C#では、HashSet<T>クラスのRemoveWhereメソッドを使うことで、述語(Predicate)で定義した条件に一致する要素をまとめて削除できます。本記事では、実際のコード例と実行結果をもとに、その基本的な使い方をわかりやすく解説します。

RemoveWhereメソッドとは

RemoveWhereは、HashSet<T>に標準で用意されているメソッドです。引数として渡されたPredicate<T>デリゲートがtrueを返すすべての要素をコレクションから削除し、削除された要素の個数をint型の戻り値として返します。

public int RemoveWhere(Predicate<T> match);

例1:特定の値を持つ要素を削除する

次の例では、「100」という値に一致する要素をHashSetから削除しています。

using System;
using System.Collections.Generic;

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

実行結果

HashSet elements...
100
300
400
500
600
HashSet after removing element 100...
300
400
500
600

述語demoは「値が100である」という条件を表しています。RemoveWhereを呼び出すことで、この条件に該当する要素だけが削除され、残りの要素が出力されていることが確認できます。

例2:条件に一致する複数の要素を削除する

述語の条件を変えれば、複数の要素をまとめて削除することも可能です。次の例では「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) {
      HashSet<int> list = new HashSet<int>();
      list.Add(100);
      list.Add(355);
      list.Add(400);
      list.Add(555);
      list.Add(600);
      Console.WriteLine("HashSet elements...");
      foreach (int i in list) {
         Console.WriteLine(i);
      }
      Console.WriteLine(" ");
      list.RemoveWhere(demo);
      Console.WriteLine("HashSet after removing some elements...");
      foreach (int i in list) {
         Console.WriteLine(i);
      }
   }
}

実行結果

HashSet elements...
100
355
400
555
600
HashSet after removing some elements...
355
555

10で割り切れる「100」「400」「600」の3つの要素が削除され、「355」と「555」だけが残りました。このように、述語のロジックを変更するだけで、柔軟な削除処理を実現できます。

補足:ラムダ式を使った簡潔な書き方

条件を別メソッドとして定義しなくても、ラムダ式を直接渡せばより簡潔に記述できます。

list.RemoveWhere(i => i == 100);

まとめ

  • RemoveWhereメソッドは、Predicate<T>で指定した条件に一致する要素をHashSetからすべて削除する。
  • 戻り値として、削除された要素の数が返される。
  • ラムダ式を使えば、条件をインラインで簡潔に記述できる。
  • ループで1つずつ判定・削除する必要がないため、コードがシンプルになり可読性も向上する。
  1. Windows 10の「プログラムから開く」リストから不要なアプリを削除する2つの方法

    Windows 10では、ファイルを右クリックすると「プログラムから開く」というオプションが表示され、選択したファイルをどのアプリケーションで開くかを選べます。しかし残念ながら、そのファイルに適さないアプリが候補として表示されることがあります。深刻な問題ではありませんが、少し煩わしく感じることもあるでしょう。 もちろん、特定のファイル形式を既定のアプリで開くよう設定することはいつでも可能です。しかし、「プログラムから開く」リストから一部のアプリを完全に削除したい場合には、それを実現する方法があります。この記事では、そのようなアプリをリストから取り除く手順をご紹介します。 「プログラムから開

  2. JavaでLinkedListから要素を削除する方法【サンプルコード付き】

    この記事では、JavaのLinkedList(リンクリスト)から要素を削除する方法について詳しく解説します。java.util.LinkedListクラスは、双方向リンクリスト(doubly-linked list)として期待される一連の操作を提供します。インデックスを指定した操作では、リストの先頭と末尾のうち、指定されたインデックスに近い方から要素をたどって処理が行われるという特徴があります。以下に具体的な例を示します。入力:The list is defined as: [Java, Scala, Python, JavaScript, C++]期待される出力:The list after