LINQ を使用して複数のオブジェクト コレクションのデカルト積を計算します
オブジェクト指向プログラミングでは、複数の犬を飼っている人や各犬が複数の子犬を飼っているなど、階層や関係を形成するデータ構造に遭遇することがあります。この種のデータに対して特定の操作を実行するには、オブジェクトの複数のコレクションのデカルト積を計算する必要がある場合があります。この記事では、C# の LINQ (統合言語クエリ) を使用してこれを実現する方法について説明します。
問題の説明
次のデータ構造を考えてみましょう:
すべての人は 1 頭以上の犬を飼い、すべての犬は 1 頭以上の子犬を飼っています。すべての人に属するすべての犬から 1 匹の子犬を取り出し、すべての可能な組み合わせのリストを生成したいとします。例:
これは、各犬に属する子犬のセットのデカルト積を表します。
LINQ ベースのソリューション
SQL を使用している場合は、犬と子犬を含むテーブルを「乗算」して、それらのデカルト積を計算するクエリを作成できます。 LINQ では、次の手順を使用して同様のことを実現できます。
1. デカルト積メソッドを定義します
コンパイル時にはドッグセットの数がわからないと仮定します。これを処理するには、セットのコレクションを入力として受け入れ、すべての可能な組み合わせを表すタプルのコレクションを返す CartesianProduct<T>
という汎用メソッドを定義できます。このアプローチの実装方法の詳細については、元の質問で提供されているリソースを参照してください。
2. デカルト積を生成します
CartesianProduct<T>
メソッドが定義されると、各犬に属する子犬のセットのデカルト積を計算するために呼び出すことができます。これは、次のコードを使用して実行できます:
<code class="language-csharp">var combinations = CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
結果のセット combinations
には、可能なすべての組み合わせを表す子犬のタプルが含まれています。
以上がLINQ は複数のオブジェクト セットのデカルト積をどのように計算できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。