本文へスキップ
BecomeCoder

C#文法コース · 第5章 LINQ · レッスン37

Where ― 条件で絞り込む

ブラウザで完結

導入

コレクションから「条件に合うものだけ」を取り出す——foreachifで書けますが、LINQWhereを使うと1行で、しかも「何をしたいか」がそのまま読める形で書けます。

図解

flowchart LR
    IN["[3, 8, 1, 10, 5]"] --> W["Where(n => n >= 5)<br/>条件: 5以上"]
    W --> OUT["[8, 10, 5]"]
    style W fill:#e1f5fe

サンプル

int[] numbers = { 3, 8, 1, 10, 5 };

// Where: 条件(ラムダ式 n => ...)を満たす要素だけを残す
var big = numbers.Where(n => n >= 5);

foreach (int n in big)
    Console.WriteLine(n);
// 8 / 10 / 5
  • Where(要素 => 条件) で条件に合う要素だけを取り出す
  • n => n >= 5ラムダ式(「n を受け取り、n>=5 を返す」小さな関数
  • 結果はまた列挙できるのでforeachで回せる

演習

string[] words = { "cat", "elephant", "dog", "giraffe", "ox" };

// TODO: Where を使って「4文字以上の単語」だけを1行ずつ出力してください
//       (elephant / giraffe)
___
  • 期待される出力: elephant giraffe(2行)
ヒント1を見る

文字数はw.LengthWhere(w => w.Length >= 4)

ヒント2を見る

foreach (var w in words.Where(w => w.Length >= 4)) Console.WriteLine(w);

まとめ

  • Where(要素 => 条件)で条件に合う要素を絞り込む
  • ラムダ式要素 => 条件で条件を表す
  • 「何を残すか」がそのまま読める

次回: 要素を別の形に変換するSelectです。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。