Liste des permutations de différentes combinaisons de caractères

Le sujet SO le plus proche que j’ai trouvé est ici: Liste de toutes les permutations d’une chaîne / d’un entier

Mais comment l’utiliser pour différents ensembles de caractères pour chaque position d’une chaîne?

Un exemple: je spécifie une longueur de chaîne de “3”. Les deux premières positions doivent être “a” ou “b”, mais la dernière position doit être “1” ou “2”, par exemple:

aa1 ba1 ab1 bb1 aa2 ab2 ba2 bb2 

Utilisez ce code:

 public static List GenerateCombinations(char[][] characters) { var combinations = new List(); GenerateCombinations(0, characters, new char[characters.GetLength(0)], combinations); return combinations; } private static void GenerateCombinations(int level, char[][] characters, char[] current, List combinations) { if (level == characters.GetLength(0)) { combinations.Add(new ssortingng(current)); return; } foreach (var character in characters[level]) { current[level] = character; GenerateCombinations(level + 1, characters, current, combinations); } } 

Exemple d’utilisation:

 public static void Main() { var characters = new[] { new[] { 'a', 'b' }, new[] { 'a', 'b' }, new[] { '1', '2' } }; var combinations = GenerateCombinations(characters); foreach (var combination in combinations) { Console.WriteLine(combination); } } 

Sortie:

 aa1 aa2 ab1 ab2 ba1 ba2 bb1 bb2 

Si la longueur est fixée, vous pouvez utiliser cette requête simple qui crée un produit cartésien :

 ssortingng chars = "ab"; int[] digits = { 1, 2 }; var query = from c1 in chars from c2 in chars from d1 in digits select ssortingng.Format("{0}{1}{2}", c1, c2, d1); ssortingng[] possibleCombinations = query.ToArray(); 

Résultat:

 aa1 aa2 ab1 ab2 ba1 ba2 bb1 bb2 

Edit : Pour ce que ça vaut, lambda à la demande (la syntaxe de requête est beaucoup plus lisible):

 possibleCombinations = chars .SelectMany(c1 => chars .SelectMany(c2 => digits .Select(d1 => ssortingng.Format("{0}{1}{2}", c1, c2, d1)))) .ToArray(); 

Si vous avez besoin d’une approche qui gère une longueur dynamic, vous pouvez regarder ceci:

Génération dynamic de toutes les combinaisons possibles d’index d’un tableau