0Pricing
C# Academy · レッスン

GroupBy、Join、Aggregate、射影(匿名型)

項目をグループ化し、シーケンスを結合し、Aggregateで集約し、匿名型を使って整理された結果へ射影します。

「GroupBy、Join、Aggregate、射影(匿名型)」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。

高度な演算子の概要

今日の内容:

  • GroupBy: キーごとにバケットを作成
  • Join: キーで2つのシーケンスを結合
  • Aggregate: 1つの値に集約
  • 匿名型: 整った射影を作成

キーによるグループ化

GroupByは、Keyと、そのキーを共有する項目の内部シーケンスを持つグループを作成します。

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    string[] words = new string[] { "ant", "cat", "tiger", "lion", "dog", "eagle" };

    var groups = words.GroupBy(w => w.Length);

    foreach (var g in groups)
    {
      Console.WriteLine("Len " + g.Key + ":");
      foreach (string w in g) Console.WriteLine(" - " + w);
    }
  }
}

キーによる内部結合

Joinは、キーによって2つのシーケンスの項目を対応付け、結合した結果を射影します。

using System;
using System.Linq;

public sealed class Customer { public int Id; public string Name; public Customer(int id, string name){ Id=id; Name=name; } }
public sealed class Order    { public int CustomerId; public string Item; public Order(int cid, string item){ CustomerId=cid; Item=item; } }

public class Program
{
  public static void Main(string[] args)
  {
    var customers = new Customer[] { new Customer(1,"Ada"), new Customer(2,"Bob") };
    var orders    = new Order[]    { new Order(1,"Book"), new Order(1,"Pen"), new Order(2,"Map") };

    var joined = customers.Join(
      orders,
      c => c.Id,
      o => o.CustomerId,
      (c, o) => c.Name + " -> " + o.Item);

    foreach (string s in joined) Console.WriteLine(s);
  }
}

Aggregateの基本

Aggregateはアキュムレーターを適用し、シーケンスを1つの結果に縮約します。適切な初期値を選びます。

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    int[] xs = new int[] { 1, 2, 3, 4 };

    // Product with seed 1
    int product = xs.Aggregate(1, (acc, n) => acc * n);
    Console.WriteLine("Product = " + product); // 24

    // Join words with a separator using seed
    string[] words = new string[] { "a", "b", "c" };
    string csv = words.Aggregate("", (acc, w) => acc == "" ? w : acc + "," + w);
    Console.WriteLine(csv); // a,b,c
  }
}

匿名型による射影

整った射影には匿名型を使います: new { Name = c.Name, ... } または省略形の new { c.Name }。

using System;
using System.Linq;

public sealed class City { public string Name; public int Pop; public City(string n,int p){ Name=n; Pop=p; } }

public class Program
{
  public static void Main(string[] args)
  {
    var cities = new City[]
    {
      new City("Oslo", 634000),
      new City("Rome", 2873000),
      new City("Riga", 605000)
    };

    var small = cities
      .Where(c => c.Pop < 1000000)
      .Select(c => new { c.Name, Millions = (c.Pop / 1000000.0) });

    foreach (var x in small)
    {
      Console.WriteLine(x.Name + " ~ " + x.Millions + "M");
    }
  }
}

実践的なヒント

ヒント:

  • GroupByの後は、グループを反復し、続けて項目を反復します。
  • 一致するキーを持つ2つのソースがある場合はJoinを使います。
  • Aggregateには、意味のある初期値を選びます。
  • 匿名型はローカルな用途に限定されます。公開APIからは具象DTOを返します。

GroupByの目的

確認: どのLINQ演算子がキーごとに要素をグループ化し、グループのシーケンスを返しますか?

要約

要約: バケットの作成にはGroupBy、ソースの結合にはJoin、縮約にはAggregate、整った射影には匿名型を使います。

よくある質問

「GroupBy、Join、Aggregate、射影(匿名型)」レッスンは無料ですか?

はい。「GroupBy、Join、Aggregate、射影(匿名型)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。

「GroupBy、Join、Aggregate、射影(匿名型)」で何を学びますか?

項目をグループ化し、シーケンスを結合し、Aggregateで集約し、匿名型を使って整理された結果へ射影します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C# Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「GroupBy、Join、Aggregate、射影(匿名型)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC# Academyレッスンでコードを書いて実行できますか?

はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. GroupBy、Join、Aggregate、射影(匿名型)
  2. 具体化(ToList、ToDictionary)とパフォーマンスの注意点
  3. 合成可能にするためのヒント
← C# Academyに戻る