Maison >développement back-end >C++ >Comment LINQ peut-il générer efficacement des produits cartésiens d'ensembles de taille variable ?

Comment LINQ peut-il générer efficacement des produits cartésiens d'ensembles de taille variable ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-18 08:46:10720parcourir

How Can LINQ Efficiently Generate Cartesian Products of Variable-Sized Sets?

Générer efficacement des produits cartésiens avec LINQ

LINQ offre un moyen puissant et efficace de générer des produits cartésiens : toutes les combinaisons possibles d'éléments provenant de plusieurs ensembles. Illustrons cela avec un exemple impliquant des personnes, leurs chiens et les chiots de leurs chiens. Chaque personne possède plusieurs chiens et chaque chien possède plusieurs chiots. L'objectif est de créer une liste de toutes les combinaisons possibles de chiots, en sélectionnant un chiot de chaque chien appartenant à une personne donnée.

Gestion d'un nombre fixe d'ensembles

Si le nombre d'ensembles (chiens) est prédéterminé, 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 génère efficacement le produit cartésien des chiots des trois premiers chiens.

Adressage d'un nombre variable d'ensembles

Cependant, lorsque le nombre de sets est dynamique (le nombre de chiens varie par personne), une approche plus flexible s'impose. La méthode CartesianProduct<T> d'Eric Lippert (telle que décrite dans son blog) fournit une solution réutilisable pour calculer le produit cartésien d'un nombre arbitraire d'ensembles.

Cette méthode permet le calcul de produits cartésiens avec un nombre variable d'ensembles d'entrées. Il peut être utilisé comme suit :

<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>

Cela génère de manière concise le produit cartésien des ensembles de chiots pour tous les chiens appartenant à une personne spécifique. Le résultat est un ensemble de séquences, chaque séquence représentant une combinaison unique de chiots, avec un chiot sélectionné parmi chaque chien.

En conclusion, LINQ fournit une méthode propre et efficace pour générer des produits cartésiens, qu'il s'agisse d'un nombre fixe ou variable d'ensembles, ce qui en fait un outil précieux pour diverses tâches de manipulation de 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn