C#で述語(Predicate)を使って配列要素をフィルタリングする方法
C#では、LINQのWhere句と述語(Predicate)を組み合わせることで、配列から条件に合致する要素だけを簡単に抽出できます。本記事では、整数型の配列から50以上の値を持つ要素をフィルタリングする具体例を紹介します。
配列の準備
まず、フィルタリング対象となる配列を設定します。
int[] arr = { 40, 42, 12, 83, 75, 40, 95 };Where句と述語によるフィルタリング
次に、AsQueryable()メソッドで配列をクエリ可能な形式に変換し、Where句にラムダ式による述語を渡すことで、50以上の要素を取得します。
IEnumerable<int> myQuery = arr.AsQueryable().Where((a, index) => a >= 50);
ここで使用している述語 (a, index) => a >= 50 は、各要素 a が条件「50以上」を満たしているかどうかを判定し、条件を満たす要素のみを結果として返します。
完全なサンプルコード
以下に、上記の処理全体を含む完全なコードを示します。
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
int[] arr = { 40, 42, 12, 83, 75, 40, 95 };
Console.WriteLine("Array:");
foreach (int a in arr) {
Console.WriteLine(a);
}
// 50以上の要素を取得
IEnumerable<int> myQuery = arr.AsQueryable().Where((a, index) => a >= 50);
Console.WriteLine("Elements above 50...:");
foreach (int res in myQuery) {
Console.WriteLine(res);
}
}
}実行結果
このプログラムを実行すると、以下のような出力が得られます。
Array: 40 42 12 83 75 40 95 Elements above 50...: 83 75 95
解説
元の配列には7つの要素が含まれていますが、そのうち50以上の条件を満たすのは 83、75、95 の3つの要素です。Where句は遅延実行されるため、foreachループで実際に列挙したタイミングでフィルタリングが行われます。このように述語を使ったフィルタリングは、条件を変更するだけでさまざまな抽出処理に応用できるため、実務でも非常に有用なテクニックです。
-
【C#入門】配列の要素をリストに変換して作成する方法
C#では、既存の配列の要素をそのまま List<T> のコンストラクタに渡すことで、簡単にリストを作成できます。ここでは、整数型の配列からListを生成する基本的な方法を解説します。 1. 配列の準備 まず、整数型の配列を宣言し、各要素に値を設定します。 int[] val = new int[5]; // 整数の要素を設定 val[0] = 15; val[1] = 25; val[2] = 40; val[3] = 58; val[4] = 70; 2. 配列の要素を使ってリストを作成 次に、List<int> のコンストラクタ引数として配列を渡します。これにより
-
C#で整数配列内のすべての重複要素を検索する方法
C#で整数配列の中から重複している要素を見つけたい場合、Dictionary(ディクショナリ)を使うのが最もシンプルで効率的な方法の一つです。各要素の出現回数を記録していき、カウントが2以上のものが「重複要素」として特定できます。この記事では、Dictionary<int, int> を使って配列内の重複要素とその出現回数を検出する具体的な手順を解説します。手順1:重複要素を含む配列を用意するまず、重複した値が含まれる整数型の配列を定義します。ここでは例として、10 と 32 がそれぞれ2回出現する配列を使用します。int[] arr = { 24, 10,