ホームページ >データベース >mysql チュートリアル >LINQ を使用して複数のセットのデカルト積を計算するにはどうすればよいですか?
デカルト積演算は、複数のセットを結合して、入力セット内の要素の可能なすべての組み合わせを含む新しいセットを作成します。
提供されたクラス構造 (人が複数の犬を持ち、各犬が複数の子犬を飼っている場合) でデカルト積演算を実行するには、LINQ を効果的に活用できます。
まず、複数のセットを入力として受け取るデカルト積関数を作成します。
<code>public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(params IEnumerable<T>[] sets) { if (sets.Length == 0) { return new[] { Enumerable.Empty<T>() }; } return sets[0].SelectMany(x => sets.Skip(1).Aggregate( new[] { x }, (acc, set) => CartesianProduct(acc, set) // 修正此处 )); }</code>
次に、関数を各犬の子犬のセットに適用します。
<code>var puppyCombinations = CartesianProduct( from dog in person.Dogs select dog.Puppies );</code>
これにより、シーケンスのシーケンスが生成されます。各内部シーケンスは、各犬からの 1 匹の子犬の組み合わせを表します。結果として得られる組み合わせは、必要に応じてアクセスして処理できます。 (ここのコードは、CartesianProduct
関数の実装に応じて、読みやすさと潜在的な効率を向上させるためにわずかに調整されています。)
注: 上記の CartesianProduct
関数の実装は、堅牢性と効率性を確保するために空のコレクションやその他のエッジ ケースを処理するためにさらなる改善が必要な場合があります。 よりクリーンで理解しやすい再帰的実装の方が適している可能性があります。
以上がLINQ を使用して複数のセットのデカルト積を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。