for文からLINQへ

― 配列処理を“進化”させる ―

今日はテスト問題から、そのまま一歩進んだ話をします。


■ 今日の問題

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

for (int i = 0; i < numbers.Length; i++)
{
    if (numbers[i] > 30)
    {
        Console.WriteLine(numbers[i]);
    }
}

何をしているコードか?

  • 配列を最初から順番に見る
  • 30より大きいものだけ表示する

出力は:

40
50
60

つまり、

「30より大きい数を取り出している」

これがこのコードの“本質”です。


■ 本質を見るクセをつけよう

for文はあくまで「やり方」です。

でも大事なのは、

何をしたいのか?

です。

今回やりたいことは、

30より大きいものを抽出したい

ただそれだけです。


■ LINQで書くとどうなる?

同じ処理をLINQで書くとこうなります。

using System.Linq;

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

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

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

■ Whereって何?

numbers.Where(n => n > 30)

意味は:

n が 30より大きいものだけ残してください

です。

for文では

  • 回して
  • 比較して
  • 条件分岐して

と書いていました。

LINQでは

条件だけを書く

のです。


■ ラムダ式を怖がらなくていい

ここで出てくる

n => n > 30

これがいわゆる「ラムダ式」です。

でも難しく考える必要はありません。

これは、

「n が 30より大きいかどうかを調べるルール」

を書いているだけです。


■ 記号の意味をシンプルに

n

→ 1つ取り出した数字

=>

→ 「ならば」「だったら」

n > 30

→ 30より大きい?

つまり、

n => n > 30

は、

「1つ取り出した数字が30より大きいならOK」

という意味です。


■ for文と比べると?

これまで書いていたのは:

if (numbers[i] > 30)

LINQではそれを短くしているだけです。

仕組みの深い話(デリゲートなど)は、

今は理解しなくて大丈夫です。

今は、

条件を書くための短い書き方

と思ってください。


■ for文とLINQの違い

for文

  • 「どう回すか」を書く
  • 手続き的
  • インデックスが必要

LINQ

  • 「何を取りたいか」を書く
  • 宣言的
  • 回し方は自動

■ 設計レベルが一段上がる

これは単なる書き方の違いではありません。

思考が変わります。

これまで

1個ずつ見て…

LINQ

条件に合うものをください

コードが「意図」に近づきます。


■ Unityや実務ではどうなる?

例えば:

var deadEnemies = enemies.Where(e => e.HP <= 0);

これは

HPが0以下の敵だけ取得

という意味です。

データが増えるほど、LINQの価値は上がります。


■ 今日のまとめ

今回の問題は、

LINQへ進むための土台

でした。

for文は「作業の書き方」

LINQは「意図の書き方」

そしてラムダ式は、

条件を書くためのシンプルなルール

です。

怖がる必要はありません。

まずは

  • Whereを使えるようになること
  • 条件を素直に書けること

ここから一歩ずつ進みましょう。

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

C#,LINQ

Posted by hidepon