LINQ はデカルト積を実装します
人が複数の犬を所有し、それぞれの犬が複数の子犬を飼っているクラス構造があるとします。子犬のすべての可能な組み合わせを、各犬からの組み合わせごとに 1 つずつ生成する LINQ ソリューションを見つけたいとします。子犬を 1 つ選択します。
ここではデカルト積の概念が適用され、セットを乗算して要素の一意の組み合わせを生成します。 SQL テーブルはこれに対するシンプルなソリューションを提供しますが、LINQ は洗練されたアプローチを提供します。
まず、セット (ドッグ) の数がコンパイル時にわかっている場合を考えてみましょう。単純な LINQ クエリを使用できます:
<code>var combinations = from p1 in dog1.Puppies from p2 in dog2.Puppies from p3 in dog3.Puppies select new {p1, p2, p3};</code>
このクエリは一連の匿名タイプを生成します。各タイプは各犬の子犬の組み合わせを表します。
ただし、コンパイル時にコレクションの数が不明な場合は、より動的なアプローチが必要です。 LINQ を使用してデカルト積を計算する方法については、Eric Lippert の記事を参照してください。
https://www.php.cn/link/f28c49d8be62973ac7716e0b87dae2f9
CartesianProduct メソッドを取得した後:
<code>var combinations = CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
これはシーケンスのシーケンスを返します。各内部シーケンスには各犬からの 1 匹の子犬の組み合わせが含まれます。
要約すると、犬の数が静的であっても動的であっても、LINQ を使用して希望する子犬の組み合わせを生成できます。
以上がLINQ はどのようにして複数の犬から可能なすべての子犬の組み合わせを効率的に生成できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。