Utilisez LINQ pour calculer le produit cartésien de plusieurs collections d'objets
Dans la programmation orientée objet, vous pouvez rencontrer des structures de données qui forment des hiérarchies ou des relations, comme une personne qui possède plusieurs chiens, et chaque chien a plusieurs chiots. Pour effectuer certaines opérations sur ce type de données, vous devrez peut-être calculer le produit cartésien de plusieurs collections d'objets. Cet article explique comment y parvenir à l'aide de LINQ (Language Integrated Query) en C#.
Explication du problème
Considérez la structure de données suivante :
Chaque personne possède un ou plusieurs chiens, et chaque chien possède un ou plusieurs chiots. Supposons que vous souhaitiez générer une liste de toutes les combinaisons possibles, en prenant un chiot de chaque chien appartenant à chaque personne. Par exemple :
Ceci représente le produit cartésien de l'ensemble des chiots appartenant à chaque chien.
Solution basée sur LINQ
Si vous utilisez SQL, vous pouvez écrire une requête pour "multiplier" les tables contenant des chiens et des chiots, calculant ainsi leur produit cartésien. Dans LINQ, vous pouvez réaliser quelque chose de similaire en suivant les étapes suivantes :
1. Définir la méthode du produit cartésien
Supposons que vous ne connaissez pas le nombre d'ensembles de chiens au moment de la compilation. Pour gérer cela, vous pouvez définir une méthode générique appelée CartesianProduct<T>
qui accepte une collection d'ensembles en entrée et renvoie une collection de tuples représentant toutes les combinaisons possibles. Pour plus de détails sur la façon de mettre en œuvre cette approche, veuillez vous référer aux ressources fournies dans la question d'origine.
2. Générer un produit cartésien
Une fois la méthode CartesianProduct<T>
définie, elle peut être appelée pour calculer le produit cartésien de l'ensemble des chiots appartenant à chaque chien. Cela peut être fait en utilisant le code suivant :
<code class="language-csharp">var combinations = CartesianProduct(from dog in person.Dogs select dog.Puppies);</code>
L'ensemble résultant combinations
contient des tuples de chiots, représentant toutes les combinaisons possibles.
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!