LINQの次の一歩(Selectとは何か?)

― データを「加工する」という考え方 ―

前回は、

numbers.Where(n => n > 30);

で「条件に合うものを抽出」しました。

条件に合うものを抽出する

という処理を学びました。

Whereは

フィルター(ふるい)

でしたね。

今日はその次の段階です。


■ Selectとは?

Selectは、

データを「別の形」に変える

ためのものです。

Whereは「残す」

Selectは「変える」

ここが最大の違いです。


■ 例1:数値を2倍にする

using System.Linq;

int[] numbers = { 10, 20, 30 };

var doubled = numbers.Select(n => n * 2);

foreach (var n in doubled)
{
    Console.WriteLine(n);
}

出力:

20
40
60

■ 何が起きている?

n => n * 2

これは

n を 2倍にするルール

です。

Selectは

1つずつ取り出して、別の値に変える

処理をしています。


■ WhereとSelectの違い(重要)

メソッド役割戻る型
Where条件に合うものだけ残す元の型
Selectデータを別の形に変える新しい型

ここを曖昧にすると混乱します。

Selectは「抽出」ではなく

変換

です。


■ 実務やUnityでは?

例えばプレイヤーがいるとします。

class Player
{
    public string Name;
    public int HP;
}


■ HPだけを数値として取得したい場合

using System;
using System.Collections.Generic;
using System.Linq;

class Player
{
    public string Name;
    public int HP;
}

class Program
{
    static void Main()
    {
        List<Player> players = new List<Player>
        {
            new Player { Name = "勇者", HP = 120 },
            new Player { Name = "戦士", HP = 150 },
            new Player { Name = "魔法使い", HP = 80 }
        };

        var hpList = players.Select(p => p.HP);

        Console.WriteLine("=== HP一覧 ===");

        foreach (var hp in hpList)
        {
            Console.WriteLine(hp);
        }
    }
}

出力:

=== HP一覧 ===
120
150
80

■ ここで大事な整理

var hpList = players.Select(p => p.HP);

これは List ではありません。

「まだ確定していないデータの流れ」です。

WhereとSelectでは、戻ってくる型が違います

List<Player> filtered = players.Where(p => p.HP > 100);
IEnumerable<int> hpList = players.Select(p => p.HP);

これは

Player を int(HP)に変換している

のです。

Whereのように「人数を減らしている」のではありません。

型が変わっています。

■ Whereと組み合わせる

強いプレイヤーの名前だけ表示したい:

var strongNames = players
    .Where(p => p.HP > 100)
    .Select(p => p.Name);

読んでみましょう。

HPが100より大きいプレイヤーを選び

そのプレイヤーを名前(string)に変換する

かなり自然な文章に近いですね。


■ ここで大事なこと

Selectもラムダ式を使います。

p => p.Name

意味は

p を Name に変換する

だけです。

今は

  • デリゲート
  • Func
  • 内部構造

を理解する必要はありません。

「変換のルールを書いている」と思えば十分です。


■ 思考が変わる瞬間

for文では:

  • 回して
  • 条件分岐して
  • 新しいリストを作って
  • Addして

と書いていました。

LINQでは:

欲しい形を書く

だけです。


■ 今日のまとめ

LINQの基本は2つ。

  1. Where = 抽出(ふるい)
  2. Select = 変換(形を変える)

この2つを理解すると、

  • ゲーム開発
  • データ処理
  • 実務アプリ開発

すべてが一段レベルアップします。


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

C#,LINQ

Posted by hidepon