LINQ を使用したデカルト積の効率的な生成
LINQ は、デカルト積 (複数のセットの要素の可能なすべての組み合わせ) を生成する強力かつ効率的な方法を提供します。 人とその犬、そしてその犬の子犬を例にしてこれを説明してみましょう。 一人の人が複数の犬を飼っており、各犬には複数の子犬がいます。 目的は、特定の人が所有する各犬から 1 匹の子犬を選択し、考えられるすべての子犬の組み合わせのリストを作成することです。
固定数のセットの処理
セット (犬) の数が事前に決まっている場合は、単純な LINQ クエリで十分です。
<code class="language-csharp">from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new { p1, p2, p3 };</code>
このクエリは、最初の 3 匹の犬から子犬のデカルト積を効率的に生成します。
可変数のセットのアドレス指定
ただし、セットの数が変動する場合 (犬の数は人によって異なります)、より柔軟なアプローチが必要です。 Eric Lippert の CartesianProduct<T>
メソッド (ブログで説明されている) は、任意の数のセットのデカルト積を計算するための再利用可能なソリューションを提供します。
このメソッドでは、可変数の入力セットを使用してデカルト積を計算できます。 次のように使用できます:
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>
これは、特定の人に属するすべての犬の子犬セットのデカルト積を簡潔に生成します。結果は一連のシーケンスであり、各シーケンスは子犬の一意の組み合わせを表し、各犬から 1 匹の子犬が選択されます。
結論として、LINQ は、固定数または可変数のセットを扱うかどうかに関係なく、デカルト積を生成するクリーンで効率的な方法を提供し、さまざまなデータ操作タスクにとって価値のあるツールとなります。
以上がLINQ はどのようにして可変サイズの集合のデカルト積を効率的に生成できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。