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

C#で述語(Predicate)に一致するリストの全要素を取得する方法


C#でList<T>から、述語(Predicate)で指定された条件に一致するすべての要素を取得するには、FindAllメソッドを使用します。FindAllメソッドは、Predicate<T>デリゲートが定義する条件を満たすすべての要素を含む新しいリストを返します。

例1:3の倍数を抽出する

using System;
using System.Collections.Generic;
public class Demo {
    private static bool demo(int i) {
       return ((i % 3) == 0);
    }
    public static void Main(String[] args) {
       List<int> list = new List<int>();
       list.Add(9);
       list.Add(15);
       list.Add(20);
       list.Add(40);
       list.Add(50);
       list.Add(60);
       Console.WriteLine("リストの要素...");
       foreach (int i in list) {
          Console.WriteLine(i);
       }
       Console.WriteLine(" ");
       List<int> res = new List<int>(list.FindAll(demo));
       Console.WriteLine("条件に一致する要素...");
       foreach (int i in res) {
          Console.WriteLine(i);
       }
    }
}

実行結果

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

リストの要素...
9
15
20
40
50
60

条件に一致する要素...
9
15
60

コードの解説

この例では、demoメソッドが「引数で受け取った整数が3で割り切れるかどうか」を判定する述語として機能しています。FindAll(demo)は、リスト内の各要素に対してこの条件を評価し、trueを返した要素(9、15、60)だけを新しいリストに格納します。なお、元のリスト自体は変更されない点にも注目してください。

例2:100で割った余りが5になる要素を抽出する

続いて、別の条件を指定した例を見てみましょう。

using System;
using System.Collections.Generic;
public class Demo {
    private static bool demo(int i) {
       return ((i % 100) == 5);
    }
    public static void Main(String[] args) {
       List<int> list = new List<int>();
       list.Add(900);
       list.Add(1500);
       list.Add(250);
       list.Add(405);
       Console.WriteLine("リストの要素...");
       foreach (int i in list) {
          Console.WriteLine(i);
       }
       Console.WriteLine(" ");
       List<int> res = new List<int>(list.FindAll(demo));
       Console.WriteLine("条件に一致する要素...");
       foreach (int i in res) {
          Console.WriteLine(i);
       }
    }
}

実行結果

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

リストの要素...
900
1500
250
405
条件に一致する要素...
405

この例では、「100で割った余りが5である」という条件に一致するのは405のみです(900 % 100 = 0、1500 % 100 = 0、250 % 100 = 50)。そのため、結果のリストには405だけが含まれています。

補足:ラムダ式でより簡潔に記述する

条件判定用のメソッドを別途定義しなくても、ラムダ式を使えば同じ処理を1行で書くことができます。

List<int> res = list.FindAll(i => i % 3 == 0);

また、LINQのWhereメソッドとToListメソッドを組み合わせることでも、同様の結果を得られます。

using System.Linq;

List<int> res = list.Where(i => i % 3 == 0).ToList();

  1. Pythonの辞書(ディクショナリ)からすべての値をリストとして取得する方法

    Pythonの辞書に格納されたすべての値をリスト形式で取得したい場合、最もシンプルな方法は dict.values() メソッドを使うことです。このメソッドは辞書内のすべての値を返すため、list() 関数で囲むことで簡単にリストへ変換できます。values() メソッドを使った基本的な例my_dict = {name: TutorialsPoint, time: 15 years, location: India} value_list = list(my_dict.values()) print(value_list)出力結果上記のコードを実行すると、次のような出力が得られます。[Tuto

  2. Redis LRANGEコマンドの使い方 – リスト値の全要素を取得する方法を解説

    このチュートリアルでは、Redisデータストアに保存されたキーのリスト値から、すべての要素を取得する方法を解説します。そのために使用するのが、RedisのLRANGEコマンドです。 LRANGEコマンドとは LRANGEコマンドは、指定したキーに保存されているリスト値から、指定されたオフセット(範囲)に基づいて1つ以上の要素を返すコマンドです。開始位置(start)と終了位置(end)の2つの引数を受け取り、どちらも範囲に含まれます。 これらのオフセットは0始まりのインデックスで指定します。つまり、「0」が最初の要素、「1」が2番目の要素を意味します。また、負の数を使うことでリストの末尾からの