導入
「部署ごとの人数」「カテゴリ別の売上」——共通のキーで要素をまとめるのがGroupByです。集計と組み合わせると強力な分析ができます。
図解
flowchart TB
IN["果物リスト<br/>りんご・みかん・りんご・ぶどう・みかん"] --> G["GroupBy(名前)"]
G --> G1["りんご: 2個"]
G --> G2["みかん: 2個"]
G --> G3["ぶどう: 1個"]
サンプル
string[] fruits = { "りんご", "みかん", "りんご", "ぶどう", "みかん" };
// GroupBy: 同じ値ごとにグループ化する
var groups = fruits.GroupBy(f => f);
foreach (var group in groups)
{
// group.Key はグループの代表値、group はそのグループの要素の集まり
Console.WriteLine($"{group.Key}: {group.Count()}個");
}
// りんご: 2個 / みかん: 2個 / ぶどう: 1個
GroupBy(要素 => キー)で同じキーごとにまとめる- 各グループは
.Key(キー)と、その要素の集まりを持つ .Count()や.Sum()と組み合わせて「グループごとの集計」ができる
演習
int[] numbers = { 1, 2, 3, 4, 5, 6 };
// TODO: GroupBy で偶数・奇数に分け、"奇数: 3個" と "偶数: 3個" を1行ずつ出力してください
// ヒント: キーは n % 2 == 0 ? "偶数" : "奇数"
___
- 期待される出力:
奇数: 3個偶数: 3個(2行。グループは最初に登場したキーの順に並ぶ——先頭の1が奇数なので奇数が先)
ヒント1を見る
numbers.GroupBy(n => n % 2 == 0 ? "偶数" : "奇数")
ヒント2を見る
foreach (var g in numbers.GroupBy(n => n % 2 == 0 ? "偶数" : "奇数")) Console.WriteLine($"{g.Key}: {g.Count()}個");
まとめ
GroupBy(要素 => キー)で同じキーごとにグループ化- 各グループは
.Keyと要素の集まりを持つ - 集計メソッドと組み合わせて「カテゴリ別集計」を実現
次回: 存在確認と、LINQの重要な性質「遅延実行」です。