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 を活用すると、フィルタ&変換の処理がとても簡潔に書けるようになります。

訪問数 4 回, 今日の訪問数 1回

C#,LINQ

Posted by hidepon