LINQで数値を絞り込み&変換!練習用データで学ぶ C# の Where と Select
C# では List<T> などのコレクションに対して、条件による絞り込みや要素の変換をシンプルに記述できる機能「LINQ(Language Integrated Query)」が用意されています。
今回は、LINQ の基本操作を体験するための 練習問題用サンプルコード を使って、Where と Select の使い方を学んでいきましょう。
1. 練習用サンプルコード
以下は、ある架空の「ポイントリスト」に対して操作を行う例です。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
var points = new List<int> { 15, 42, 67, 28, 90, 31 };
var filteredPoints = points
.Where(p => p >= 30)
.Select(p => p + 10);
Console.WriteLine("=== 加算後のポイント一覧 ===");
foreach (var p in filteredPoints)
{
Console.WriteLine(p);
}
}
}
2. 処理の流れ
ステップ①:元データの準備
var points = new List<int> { 15, 42, 67, 28, 90, 31 };
これは、ユーザーが獲得した「ポイント一覧」だとイメージしてください。
ステップ②:30点以上だけを抽出(Where)
.Where(p => p >= 30)
これは、「30点以上の人だけにボーナスを与える」ような条件処理です。
ステップ③:抽出された値を +10 する(Select)
.Select(p => p + 10)
対象のポイントを 10点加算して、新しいリストを作ります。
ステップ④:結果を表示(foreach)
foreach (var p in filteredPoints)
{
Console.WriteLine(p);
}
3. 実行結果
=== 加算後のポイント一覧 ===
52
77
100
41
元のリストから 30以上の数値だけが抽出され、それぞれ10加算された結果です。
4. 練習課題(自分で試してみよう)
以下のコードを自分で書き換えてみましょう。
【練習A】
- points の中から 偶数だけを選び、2倍して表示するように変更せよ
【練習B】
- points の中から 50点以上だけを選び、「○○点(合格)」という文字列として表示せよ
以下に、練習A・練習Bのサンプル回答をそれぞれ示します。どちらも LINQ を使った基本的な操作ですが、目的(フィルター・変換・文字列化)に応じて記述が少し変わります。
【練習A】
偶数だけを選び、2倍して表示する
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
var points = new List<int> { 15, 42, 67, 28, 90, 31 };
var doubledEvenPoints = points
.Where(p => p % 2 == 0) // 偶数のみ抽出
.Select(p => p * 2); // 2倍に変換
Console.WriteLine("=== 偶数の2倍表示 ===");
foreach (var p in doubledEvenPoints)
{
Console.WriteLine(p);
}
}
}
【練習B】
50点以上だけを選び、「○○点(合格)」と表示する
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
var points = new List<int> { 15, 42, 67, 28, 90, 31 };
var passMessages = points
.Where(p => p >= 50) // 50点以上
.Select(p => $"{p}点(合格)"); // メッセージ化
Console.WriteLine("=== 合格者一覧 ===");
foreach (var msg in passMessages)
{
Console.WriteLine(msg);
}
}
}
実行結果(参考)
練習A の出力例:
=== 偶数の2倍表示 ===
84
56
180
練習B の出力例:
=== 合格者一覧 ===
67点(合格)
90点(合格)
どちらも LINQ の基本操作「Where(選ぶ)+Select(変える)」の組み合わせです。
慣れてくると、さまざまな条件や出力形式に応用できるようになります。
5. まとめ
機能 | 内容 |
---|---|
Where | 条件に合う要素を抽出(フィルター) |
Select | 各要素を変換(マッピング) |
foreach | 結果のリストを1つずつ表示 |
LINQ を活用すると、フィルタ&変換の処理がとても簡潔に書けるようになります。
ディスカッション
コメント一覧
まだ、コメントがありません