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
1 2 3 4 5 6 7 8 9 10 11 | 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 })
);
}
|
Copier après la connexion
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.
1 2 3 4 5 | 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 + ")" );
|
Copier après la connexion
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!