LINQ を使用した子犬セットのデカルト積の生成
LINQ は、SQL の機能を反映したデカルト積を作成するための洗練されたソリューションを提供します。 これを、人間、その犬、そしてそれぞれの犬が飼っている子犬が関与するシナリオで説明してみましょう。 目的は、人が飼っている各犬から 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>
このクエリは、dog1
、dog2
、dog3
からそれぞれ 1 つずつ、子犬のすべての組み合わせを生成します。
セット数不明
不明な数の犬セットを処理するには、より柔軟なアプローチが必要です:
CartesianProduct<T>
メソッド: 再帰メソッド CartesianProduct<T>
が作成されます。このメソッドは、子犬セットを表す IEnumerable<T>
のシーケンスを受け入れます。
再帰的実装: CartesianProduct<T>
メソッドは、入力シーケンスから可能なすべての組み合わせを再帰的に生成します。
このメソッドを使用すると、デカルト積が簡潔に取得されます。
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
この 1 行により、考えられるすべての子犬の組み合わせが生成され、その人の所有する各犬から 1 匹の子犬が確実に選択されます。
この LINQ ベースのアプローチは、集合演算と再帰を活用し、入力セットの数に関係なく効率的にデカルト積を生成し、強力で適応性のあるソリューションを提供します。
以上がLINQ を使用して子犬セットのデカルト積を効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。