Maîtriser les produits cartésiens LINQ pour les structures d'objets complexes
Générer toutes les combinaisons possibles de chiots à partir de plusieurs chiens présente un défi unique lorsqu'il s'agit de structures d'objets complexes. Heureusement, LINQ propose des solutions élégantes.
Une méthode implique le produit cartésien, une technique qui combine efficacement plusieurs ensembles pour produire toutes les paires possibles. Si le nombre de jeux de chiens est connu à l'avance (au moment de la compilation), une simple requête LINQ suffit :
<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>
Cette requête donne un résultat comme celui-ci :
<code>{ {p11, p21, p31}, {p11, p21, p32}, {p12, p21, p31}, {p12, p21, p32} }</code>
Chaque élément représente un type anonyme contenant une combinaison unique de chiots.
Cependant, lorsque le nombre de jeux de chiens est dynamique (inconnu au moment de la compilation), une approche plus flexible est nécessaire. L'article d'Eric Lippert (https://www.php.cn/link/f28c49d8be62973ac7716e0b87dae2f9) propose une CartesianProduct<T>
méthode conçue à cet effet. En utilisant cette méthode, la requête se simplifie en :
<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>
Cela produit le même résultat que l'exemple précédent : un ensemble de séquences, chacune représentant une combinaison distincte de chiots.
En conclusion, la flexibilité de LINQ permet des calculs efficaces de produits cartésiens sur des structures de données complexes, facilitant ainsi une analyse perspicace des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!