C# LINQ入門:Where でデータを簡単に絞り込む
var even = numbers.Where(n => n % 2 == 0);をやさしく解説
はじめに
C# を学び始めたばかりの方にとって、次のような1行コードを見て「なにこれ?」と思うことがあるかもしれません。
var even = numbers.Where(n => n % 2 == 0);
このコードは、LINQ(リンク)と呼ばれる便利な文法を使って、リストの中から偶数だけを取り出しています。
この記事では、この1行の意味を初学者向けに丁寧に解説します。
そもそも LINQ とは?
LINQ(Language Integrated Query)は、C# に組み込まれた コレクション操作のための道具です。
- 配列や List などから、条件に合うデータだけを取り出したり、
- 並び替えたり、
- 集計したりすることができます。
LINQ を使えば、for や foreach の代わりに、直感的に書けるのが大きなメリットです。
実行例コード:偶数だけを抽出する
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var even = numbers.Where(n => n % 2 == 0);
foreach (var n in even)
{
Console.WriteLine(n);
}
}
}
実行結果:
2
4
コードを一つずつ分解して理解しよう
numbers
これは、整数のリストです。
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
この中から「偶数だけを取り出したい」というのが目的です。
Where とは?
LINQ のメソッドの1つで、「条件に合うものだけを選ぶ」ために使います。
- 「偶数だけ欲しい」
- 「5より大きいものだけ取りたい」
など、絞り込み処理に使われます。
n => n % 2 == 0 とは?
これは ラムダ式 と呼ばれます。
n => n % 2 == 0
は、次の同じです
n => (n % 2 == 0)
は、「n を順番に見て、n が偶数なら true」という意味になります。
- n は numbers の中の1つ1つの数字(1, 2, 3…)
- n % 2 == 0 は「n を2で割った余りが0か」→ 偶数かどうかのチェック
var even = … とは?
この1行は、こう読むとわかりやすくなります:
numbers の中から「偶数だけを抽出して」even に入れる
even は IEnumerable<int> 型の変数になります(後で foreach で使えるリストのようなもの)。
同じ処理を従来の方法で書くと…
LINQ を使わずに書くと、こうなります:
List<int> even = new List<int>();
foreach (int n in numbers)
{
if (n % 2 == 0)
{
even.Add(n);
}
}
→ LINQ を使えば、この5行が1行に短縮でき、コードが読みやすくなります。
まとめ表
部分 | 意味 |
---|---|
numbers | 数のリスト(1, 2, 3, 4, 5) |
.Where(…) | 条件に合うものだけを選び出す |
n => n % 2 == 0 | 各要素 n が偶数かどうかをチェックする |
var even = … | 偶数だけを集めたデータを even に入れる |
よくある質問:ラムダ式って何?
ラムダ式(=> 記号)は、「1つずつ調べて条件を満たすか」 を書くためのものです。
最初は難しそうに見えますが、n => 条件 は「1つずつ n を調べて条件を見る」という風に覚えましょう。
おわりに
LINQ を使えば、配列やリストの操作がとてもシンプルに書けるようになります。
まずは今回紹介した Where() を使って、「条件に合うものを取り出す」練習から始めてみましょう。
次は、Select()(データの形を変える)や OrderBy()(並び替え)にもチャレンジしてみてください。
補足:忘れずに書こう!
LINQ を使うには、usingディレクティブが必要です:
using System.Linq;
ディスカッション
コメント一覧
まだ、コメントがありません