Maison >développement back-end >C++ >Comment générer toutes les combinaisons possibles de caractères et entiers à partir de deux tableaux utilisant LINQ?

Comment générer toutes les combinaisons possibles de caractères et entiers à partir de deux tableaux utilisant LINQ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-31 05:21:38800parcourir

How to Generate All Possible Combinations of Characters and Integers from Two Arrays Using LINQ?

générer toutes les combinaisons possibles

Description du problème

Donner deux arrays, Array1 contient des caractères et Array2 contient entier. Ces combinaisons devraient traverser tous les i, j, k, etc.

Réponse

Pour générer toutes les combinaisons possibles avec LINQ, nous pouvons utiliser la technologie appelée "Descartes". Ce processus implique la création d'une séquence, qui contient chaque combinaison d'éléments possible à partir de plusieurs séquences d'entrée.

accumulation de descartes

Le code suivant définit une méthode d'extension

, il exécute l'accumulation de slidel de n'importe quelle séquence de nombres:

CartesianProduct Générer la combinaison de chaînes

<code class="language-csharp">static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences)
{
    IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
    return sequences.Aggregate(
        emptyProduct,
        (accumulator, sequence) =>
            from accseq in accumulator
            from item in sequence
            select accseq.Concat(new[] { item })
    );
}</code>
Une fois que nous avons la méthode

, la chaîne du format de formatage devient très simple:

CartesianProduct Dans cet exemple, la variable

contient une séquence d'une séquence de chaîne, dont chacune représente une combinaison d'une ligne.
<code class="language-csharp">var arr1 = new[] { "a", "b", "c" };
var arr2 = new[] { 3, 2, 4 };
var result = from cpLine in CartesianProduct(
                 from count in arr2 select Enumerable.Range(1, count).Select(i => i.ToString()))
             select cpLine.Zip(arr1, (x1, x2) => x2 + "(" + x1 + ")");</code>

combinaison de sortie result Pour les combinaisons de sortie spécifiées dans la description de la question, nous pouvons utiliser un cycle simple:

En appliquant la méthode à la plage de Descartes et le tableau de caractères d'origine de la tâche, nous pouvons générer efficacement toutes les combinaisons possibles de l'élément donné.

Cette réponse révisée améliore la clarté du code et aborde directement l'instruction PRIVETM par les générations au format "A (i) B (J)".

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